OSDN Git Service

referenceCountを導入。今のところ正常に動作している。メモリリークについても一部改善。69.67KB(1852/2023)>36.59KB(588/2163)
[chnosproject/CHNOSProject.git] / CHNOSProject / chn / chnlib.h
index f9a2e6b..2b413fe 100755 (executable)
@@ -27,6 +27,7 @@
 \r
 #ifdef DEBUG\r
 //#define DEBUG_MEMORY_ALLOCATION\r
+//#define DEBUG_MEMORY_REFERENCE_COUNT\r
 #endif\r
 \r
 //\r
@@ -42,6 +43,8 @@ struct CHNLIB_STRUCTURE_HEADER {
     //ライブラリ共通構造体ヘッダ\r
     uint signature;\r
     uint typeid;\r
+    uint referenceCount;\r
+    void (*destructor)(void **structrue);\r
 };\r
 \r
 //\r
@@ -61,6 +64,10 @@ struct CHNLIB_STRUCTURE_HEADER {
 \r
 #define CHNLIB_UIPArray_INDEX_NOTFOUND  -1\r
 \r
+#define retain(structure)   CHNLIB_Retain((void **) &structure)\r
+#define release(structure)  CHNLIB_Release((void **) &structure)\r
+#define autorelease(structure)  CHNLIB_AutoRelease(structure)\r
+\r
 //\r
 //Declare library functions\r
 //\r
@@ -72,7 +79,9 @@ void CHNLIB_StructureHeader_Initialize(CHNLIB_StructureHeader *header, uint type
 uint CHNLIB_StructureHeader_GetTypeID(const void *structure);\r
 void *CHNLIB_System_AllocateMemory_Strict(int size, const char filename[], int line, const char funcname[]);\r
 void CHNLIB_System_FreeMemory(void *p, const char filename[], int line, const char funcname[]);\r
-\r
+void CHNLIB_Retain(void **structure);\r
+void CHNLIB_Release(void **structure);\r
+void *CHNLIB_AutoRelease(void *structure);\r
 //@chnlib00.c\r
 typedef struct CHNLIB_UIPARRAY CHNLIB_UIPArray;\r
 struct CHNLIB_UIP_ARRAY;\r
@@ -101,8 +110,8 @@ void *CHNLIB_UIPArray_GetPointerByData32(const CHNLIB_UIPArray *array, uint data
 int CHNLIB_UIPArray_GetIndexByData32(const CHNLIB_UIPArray *array, uint data32);\r
 //----配列のコピー\r
 CHNLIB_UIPArray *CHNLIB_UIPArray_CopyArray(const CHNLIB_UIPArray *source);\r
-//----配列のソート\r
-CHNLIB_UIPArray *CHNLIB_UIPArray_SortInDescendingOrderByData32(const CHNLIB_UIPArray *array);\r
+//----配列のソートしたものを新たに取得\r
+CHNLIB_UIPArray *CHNLIB_UIPArray_GetSortedInDescendingOrderByData32(const CHNLIB_UIPArray *array);\r
 \r
 //@chnlib01.c\r
 typedef struct CHNLIB_STRING CHNLIB_String;\r