Files
PlantAI-dev/tools/pymol-open-source/ov/src/OVHeapArray.h
T
2026-08-03 18:42:47 +08:00

92 lines
2.9 KiB
C

#ifndef _H_OVHeapArray
#define _H_OVHeapArray
#include "OVHeap.h"
typedef struct {
ov_size size, unit_size;
OVHeap *heap;
ov_boolean auto_zero;
} _OVHeapArray;
void *_OVHeapArray_Alloc(OVHeap * heap, ov_size unit_size, ov_size size, int zero
#ifdef OVHeap_TRACKING
, const char *file, int line
#endif
);
void *_OVHeapArray_Check(void *ptr, ov_size index
#ifdef OVHeap_TRACKING
, const char *file, int line
#endif
);
void _OVHeapArray_Free(void *ptr
#ifdef OVHeap_TRACKING
, const char *file, int line
#endif
);
void *_OVHeapArray_SetSize(void *ptr, ov_size new_size
#ifdef OVHeap_TRACKING
, const char *file, int line
#endif
);
ov_size OVHeapArray_GetSize(void *ptr
#ifdef OVHeap_TRACKING
, const char *file, int line
#endif
);
#ifndef OVHeap_TRACKING
#define OVHeapArray_MALLOC(heap,type,size) ((type*)_OVHeapArray_Alloc(heap,sizeof(type),\
size,0))
#define OVHeapArray_CALLOC(heap,type,size) ((type*)_OVHeapArray_Alloc(heap,sizeof(type),\
size,1))
#define OVHeapArray_CHECK(ptr,type,index) (((index)>=(((_OVHeapArray*)(ptr))[-1].size)) ? \
(((index)<((_OVHeapArray*)((ptr)=\
(type*)_OVHeapArray_Check((void*)(ptr),index)))[-1].size))\
: OV_TRUE)
#define OVHeapArray_SET_SIZE(ptr,type,new_size) \
(((new_size)== \
((_OVHeapArray*)((ptr)= \
(type*)_OVHeapArray_SetSize((void*)(ptr),(new_size))))[-1].size))
#define OVHeapArray_GET_SIZE(ptr) OVHeapArray_GetSize((void*)ptr)
#define OVHeapArray_FREE(ptr) _OVHeapArray_Free((void*)(ptr))
#else
#define OVHeapArray_MALLOC(heap,type,size) (type*)_OVHeapArray_Alloc(heap,sizeof(type),\
size,0,\
__FILE__,__LINE__)
#define OVHeapArray_CALLOC(heap,type,size) (type*)_OVHeapArray_Alloc(heap,sizeof(type),\
size,1,\
__FILE__,__LINE__)
#define OVHeapArray_CHECK(ptr,type,index) (((index)>=(((_OVHeapArray*)(ptr))[-1].size)) ? \
(((index)<((_OVHeapArray*)((ptr)=\
(type*)_OVHeapArray_Check((void*)(ptr),index,__FILE__,__LINE__)))[-1].size))\
: OV_TRUE)
#define OVHeapArray_SET_SIZE(ptr,type,new_size) \
(((new_size)== \
((_OVHeapArray*)((ptr)= \
(type*)_OVHeapArray_SetSize((void*)(ptr),(new_size),__FILE__,__LINE__)))[-1].size))
#define OVHeapArray_GET_SIZE(ptr) OVHeapArray_GetSize((void*)ptr,__FILE__,__LINE__)
#define OVHeapArray_FREE(ptr) _OVHeapArray_Free((void*)(ptr),__FILE__,__LINE__)
#endif
#define OVHeapArray_FREE_AUTO_NULL(ptr) { if(ptr) { OVHeapArray_FREE(ptr); (ptr)=OV_NULL;}}
#endif