File indexing completed on 2025-03-13 09:28:29
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef UPB_MEM_ALLOC_H_
0009 #define UPB_MEM_ALLOC_H_
0010
0011
0012 #include "upb/port/def.inc"
0013
0014 #ifdef __cplusplus
0015 extern "C" {
0016 #endif
0017
0018 typedef struct upb_alloc upb_alloc;
0019
0020
0021
0022
0023
0024 typedef void* upb_alloc_func(upb_alloc* alloc, void* ptr, size_t oldsize,
0025 size_t size);
0026
0027
0028
0029
0030
0031
0032
0033 struct upb_alloc {
0034 upb_alloc_func* func;
0035 };
0036
0037 UPB_INLINE void* upb_malloc(upb_alloc* alloc, size_t size) {
0038 UPB_ASSERT(alloc);
0039 return alloc->func(alloc, NULL, 0, size);
0040 }
0041
0042 UPB_INLINE void* upb_realloc(upb_alloc* alloc, void* ptr, size_t oldsize,
0043 size_t size) {
0044 UPB_ASSERT(alloc);
0045 return alloc->func(alloc, ptr, oldsize, size);
0046 }
0047
0048 UPB_INLINE void upb_free(upb_alloc* alloc, void* ptr) {
0049 UPB_ASSERT(alloc);
0050 alloc->func(alloc, ptr, 0, 0);
0051 }
0052
0053
0054
0055 extern upb_alloc upb_alloc_global;
0056
0057
0058
0059
0060
0061
0062 UPB_INLINE void* upb_gmalloc(size_t size) {
0063 return upb_malloc(&upb_alloc_global, size);
0064 }
0065
0066 UPB_INLINE void* upb_grealloc(void* ptr, size_t oldsize, size_t size) {
0067 return upb_realloc(&upb_alloc_global, ptr, oldsize, size);
0068 }
0069
0070 UPB_INLINE void upb_gfree(void* ptr) { upb_free(&upb_alloc_global, ptr); }
0071
0072 #ifdef __cplusplus
0073 }
0074 #endif
0075
0076 #include "upb/port/undef.inc"
0077
0078 #endif