return True;\r
}\r
\r
+int CHNLIB_UIPArray_RemoveByIndex(CHNLIB_UIPArray **array, int index)\r
+{\r
+ //戻り値:削除が成功したか(0:成功,-1:指定された添字の要素は存在しない)\r
+ //indexが指し示す要素を削除し、後続の要素は前へつめる。\r
+ //削除された要素に格納されていたデータに関しては関知しない。\r
+ int i;\r
+ \r
+ for(; (index / CHNLIB_UIPArray_INTERNAL_PACKDATAS) > 0; index -= CHNLIB_UIPArray_INTERNAL_PACKDATAS){\r
+ if(*array == NULL){\r
+ return -1;\r
+ }\r
+ array = &(*array)->next;\r
+ }\r
+ if(*array == NULL){\r
+ return -1;\r
+ }\r
+ if(index >= (*array)->using_tags){\r
+ return -1;\r
+ }\r
+ for(i = index; i < (*array)->using_tags - 1; i++){\r
+ (*array)->tag[i] = (*array)->tag[i + 1];\r
+ }\r
+ for(;;){\r
+ if((*array)->next != NULL){\r
+ if((*array)->using_tags != CHNLIB_UIPArray_INTERNAL_PACKDATAS || (*array)->next->using_tags == 0){\r
+ //タグ数とリンクの関係があわない。以下の状態になっている。\r
+ //次のパックがあるのに、間のパックが使い切られていない。\r
+ //次のパックがあるのに、次のパックに一つもデータがない。\r
+ CHNLIB_ReportError("Internal data error.", CHNLIB_DEBUG_ARGUMENTS);\r
+ }\r
+ (*array)->tag[CHNLIB_UIPArray_INTERNAL_PACKDATAS - 1] = (*array)->next->tag[0];\r
+ array = &(*array)->next;\r
+ for(i = 0; i < (*array)->using_tags - 1; i++){\r
+ (*array)->tag[i] = (*array)->tag[i + 1];\r
+ }\r
+ } else{\r
+ (*array)->using_tags--;\r
+ if((*array)->using_tags == 0){\r
+ //もうこのパックにはデータが存在しないので、パックを削除。\r
+ CHNLIB_System_FreeMemory(*array, CHNLIB_DEBUG_ARGUMENTS);\r
+ *array = NULL;\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ return 0;\r
+}\r
+\r
void CHNLIB_UIPArray_FreeOnlyArray(CHNLIB_UIPArray **array)\r
{\r
//ArrayそのものをFreeする。\r
\r
for(; now != NULL; ){\r
next = now->next;\r
- free(now);\r
+ //free(now);\r
+ CHNLIB_System_FreeMemory(now, CHNLIB_DEBUG_ARGUMENTS);\r
now = next;\r
}\r
return;\r
for(; array != NULL; array = array->next){\r
for(i = 0; i < array->using_tags; i++){\r
if(array->tag[i].pointer != NULL){\r
- free(array->tag[i].pointer);\r
+ //free(array->tag[i].pointer);\r
+ CHNLIB_System_FreeMemory(array->tag[i].pointer, CHNLIB_DEBUG_ARGUMENTS);\r
array->tag[i].pointer = NULL;\r
}\r
}\r
for(; array != NULL; array = array->next){\r
for(i = 0; i < array->using_tags; i++){\r
if(array->tag[i].pointer != NULL && !array->tag[i].data32){\r
- free(array->tag[i].pointer);\r
+ //free(array->tag[i].pointer);\r
+ CHNLIB_System_FreeMemory(array->tag[i].pointer, CHNLIB_DEBUG_ARGUMENTS);\r
array->tag[i].pointer = NULL;\r
}\r
}\r