| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /* Copyright 2016 Google Inc. All Rights Reserved.
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
- */
- /* Macros for memory management. */
- #ifndef BROTLI_ENC_MEMORY_H_
- #define BROTLI_ENC_MEMORY_H_
- #include "../common/types.h"
- #include "./port.h"
- #if defined(__cplusplus) || defined(c_plusplus)
- extern "C" {
- #endif
- #if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \
- !defined(BROTLI_ENCODER_EXIT_ON_OOM)
- #define BROTLI_ENCODER_EXIT_ON_OOM
- #endif
- typedef struct MemoryManager {
- brotli_alloc_func alloc_func;
- brotli_free_func free_func;
- void* opaque;
- #if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
- int is_oom;
- size_t perm_allocated;
- size_t new_allocated;
- size_t new_freed;
- void* pointers[256];
- #endif /* BROTLI_ENCODER_EXIT_ON_OOM */
- } MemoryManager;
- BROTLI_INTERNAL void BrotliInitMemoryManager(
- MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,
- void* opaque);
- BROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n);
- #define BROTLI_ALLOC(M, T, N) ((T*)BrotliAllocate((M), (N) * sizeof(T)))
- BROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p);
- #define BROTLI_FREE(M, P) { \
- BrotliFree((M), (P)); \
- P = NULL; \
- }
- #if defined(BROTLI_ENCODER_EXIT_ON_OOM)
- #define BROTLI_IS_OOM(M) (!!0)
- #else /* BROTLI_ENCODER_EXIT_ON_OOM */
- #define BROTLI_IS_OOM(M) (!!(M)->is_oom)
- #endif /* BROTLI_ENCODER_EXIT_ON_OOM */
- BROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m);
- #if defined(__cplusplus) || defined(c_plusplus)
- } /* extern "C" */
- #endif
- #endif /* BROTLI_ENC_MEMORY_H_ */
|