// Copyright (c) 2013年 Hikaru Nishida. All rights reserved.\r
//\r
\r
+// ライブラリ全体を支援する関数群\r
+\r
//\r
//Include headers\r
//\r
\r
void CHNLIB_Debug(const char format[], const char filename[], int line, const char funcname[], ...)\r
{\r
+ //デバッグ用printf\r
char s[CHNLIB_MAX_STRING_LENGTH];\r
va_list varg;\r
\r
\r
void CHNLIB_Debug_PrintStructureData(void *structure, uint level)\r
{\r
- //level == 0:全階層\r
- //level >= 1:level階層まで\r
+ //ライブラリ定義の構造体の中身を表示する。\r
+ //structureがUIPArrayを指していた場合、その中身も表示する。表示する階層はlevelで制限できる。\r
+ //-level == 0:全階層\r
+ //-level >= 1:level階層まで\r
\r
CHNLIB_Debug_PrintStructureData_RecursiveCounter = level - 1;\r
\r
\r
void CHNLIB_ReportError(const char format[], const char filename[], int line, const char funcname[], ...)\r
{\r
+ //stderrにprintfの書式に従って出力する。\r
char s[CHNLIB_MAX_STRING_LENGTH];\r
va_list varg;\r
\r
\r
void CHNLIB_StructureHeader_Initialize(CHNLIB_StructureHeader *header, uint typeid)\r
{\r
+ //ライブラリ共通構造体ヘッダの初期化を行う。\r
+ //各構造体のInitializeで呼ばれることを想定している。\r
if(header == NULL){\r
- CHNLIB_ReportError("Null structure.", __FILE__, __LINE__, __FUNCTION__);\r
+ CHNLIB_ReportError("Null structure.", CHNLIB_DEBUG_ARGUMENTS);\r
return;\r
}\r
\r
\r
uint CHNLIB_StructureHeader_GetTypeID(const void *structure)\r
{\r
+ //structureが指す構造体のヘッダを確認して、その構造体のtypeidを返す。\r
+ //ポインタの正当性の実証に利用するとよい。\r
CHNLIB_StructureHeader *strhead;\r
\r
if(structure == NULL){\r
\r
void *CHNLIB_System_AllocateMemory_Strict(int size, const char filename[], int line, const char funcname[])\r
{\r
+ //mallocを行い、確保が失敗した場合にメッセージを出力してプログラムを終了する。\r
+ //また、この関数で取得されたメモリはゼロクリアされていることが保証される。\r
void *p;\r
\r
p = malloc(size);\r
if(p == NULL){\r
- CHNLIB_ReportError("An attempt to allocate memory %d bytes in %s@%s:%d: is failed. Abort.", __FILE__, __LINE__, __FUNCTION__, size, filename, line, funcname);\r
+ CHNLIB_ReportError("An attempt to allocate memory %d bytes in %s@%s:%d: is failed. Abort.", CHNLIB_DEBUG_ARGUMENTS, size, filename, line, funcname);\r
exit(EXIT_FAILURE);\r
}\r
\r
#ifdef DEBUG_MEMORY_ALLOCATION\r
- CHNLIB_Debug("Request allocation %d bytes ->[%p].", __FILE__, __LINE__, __FUNCTION__, size, p);\r
+ CHNLIB_Debug("Request allocation %d bytes ->[%p].", CHNLIB_DEBUG_ARGUMENTS, size, p);\r
#endif\r
\r
memset(p, 0, size);\r
\r
void CHNLIB_System_FreeMemory(void *p, const char filename[], int line, const char funcname[])\r
{\r
+ //ポインタがNullでないことを確認して、Freeする。\r
if(p == NULL){\r
- CHNLIB_ReportError("An attempt to free NULL memory in %s@%s:%d:. Ignore.", __FILE__, __LINE__, __FUNCTION__, filename, line, funcname);\r
+ CHNLIB_ReportError("An attempt to free NULL memory in %s@%s:%d:. Ignore.", CHNLIB_DEBUG_ARGUMENTS, filename, line, funcname);\r
return;\r
}\r
\r
#ifdef DEBUG_MEMORY_ALLOCATION\r
- CHNLIB_Debug("Request ƒree memory [%p].", __FILE__, __LINE__, __FUNCTION__, p);\r
+ CHNLIB_Debug("Request ƒree memory [%p].", CHNLIB_DEBUG_ARGUMENTS, p);\r
#endif\r
\r
free(p);\r
\r
return;\r
-\r
}\r
\r
//\r
\r
const char *CHNLIB_Debug_Internal_GetStructTypeNameByID(uint typeid)\r
{\r
+ //デバッグ出力で利用するための構造体名を取得する。\r
+ //このソース以外から呼び出してはならない。\r
switch(typeid){\r
case CHNLIB_STRUCT_ID_Null:\r
return "Null";\r
\r
void CHNLIB_Debug_Internal_PrintStructureDataSub(void *structure, uint level)\r
{\r
+ //デバッグ出力のサブルーチン。\r
+ //このソース以外から呼び出してはならない。\r
int typeid, i, j;\r
void *p;\r
\r
\r
void CHNLIB_Debug_Internal_PrintIndent(int level)\r
{\r
+ //デバッグ出力のサブルーチン。\r
+ //このソース以外から呼び出してはならない。\r
int i;\r
\r
for(i = 0; i < level; i++){\r