// Copyright (c) 2013年 Hikaru Nishida. All rights reserved.\r
//\r
\r
+//String関連のうち、このソースファイルで完結する関数群\r
+\r
//\r
//Include headers\r
//\r
//\r
\r
struct CHNLIB_STRING {\r
+ //文字列を保持する\r
CHNLIB_StructureHeader header;\r
char *str;\r
};\r
\r
CHNLIB_String *CHNLIB_String_Initialize(const char str[])\r
{\r
+ //指定された引数strと等価なStringを確保し返す。\r
+ //str==NULLの時は、NULLポインタへの参照を持つStringを返す。\r
CHNLIB_String *strtag;\r
\r
strtag = CHNLIB_String_Internal_Allocate();\r
\r
void CHNLIB_String_Free(CHNLIB_String *strtag)\r
{\r
- if(strtag == NULL){\r
+ //strtagを解放する。\r
+ \r
+ if(CHNLIB_StructureHeader_GetTypeID(strtag) != CHNLIB_STRUCT_ID_String){\r
return;\r
}\r
\r
if(strtag->str != NULL){\r
- CHNLIB_System_FreeMemory(strtag->str, __FILE__, __LINE__, __FUNCTION__);\r
+ CHNLIB_System_FreeMemory(strtag->str, CHNLIB_DEBUG_ARGUMENTS);\r
}\r
strtag->header.typeid = CHNLIB_STRUCT_ID_Null;\r
strtag->header.signature = 0;\r
- CHNLIB_System_FreeMemory(strtag, __FILE__, __LINE__, __FUNCTION__);\r
+ CHNLIB_System_FreeMemory(strtag, CHNLIB_DEBUG_ARGUMENTS);\r
+ \r
+ return;\r
}\r
\r
int CHNLIB_String_SetStringFromCString(CHNLIB_String *strtag, const char s[])\r
{\r
+ //strtagにsと等価な文字列を代入する。\r
+ //strtag==Invalid || s==NULLのときは何もしない。\r
int i, size;\r
\r
- if(strtag == NULL){\r
+ if(CHNLIB_StructureHeader_GetTypeID(strtag) != CHNLIB_STRUCT_ID_String){\r
+ return 0;\r
+ }\r
+ \r
+ if(s == NULL){\r
return 0;\r
}\r
\r
size = CHNLIB_CString_GetLength(s) + 1;\r
if(strtag->str != NULL){\r
- CHNLIB_System_FreeMemory(strtag->str, __FILE__, __LINE__, __FUNCTION__);\r
+ CHNLIB_System_FreeMemory(strtag->str, CHNLIB_DEBUG_ARGUMENTS);\r
}\r
- strtag->str = CHNLIB_System_AllocateMemory_Strict(size, __FILE__, __LINE__, __FUNCTION__);\r
+ strtag->str = CHNLIB_System_AllocateMemory_Strict(size, CHNLIB_DEBUG_ARGUMENTS);\r
for(i = 0; i < size - 1; i++){\r
strtag->str[i] = s[i];\r
}\r
\r
int CHNLIB_String_Print(CHNLIB_String *strtag)\r
{\r
- if(strtag == NULL){\r
+ //strtagが格納している文字列を標準出力に出力する。\r
+ if(CHNLIB_StructureHeader_GetTypeID(strtag) != CHNLIB_STRUCT_ID_String){\r
return 0;\r
}\r
if(strtag->str == NULL){\r
\r
const char *CHNLIB_String_GetReferencePointerOfCString(const CHNLIB_String *strtag)\r
{\r
+ //strtagが格納している文字列へのポインタを返す。\r
+ //strtag==Invalidの場合、NULLを返す。\r
if(CHNLIB_StructureHeader_GetTypeID(strtag) != CHNLIB_STRUCT_ID_String){\r
return NULL;\r
}\r
\r
CHNLIB_String *CHNLIB_String_ExtractByLength(const CHNLIB_String *strtag, int start, int len)\r
{\r
+ //strtagが格納している文字列sについて、\r
+ //s[start]からs[start + len - 1]の文字を含む文字列と等価なStringを確保し返す。\r
+ //lenに満たずにsが終端文字を迎えた場合は、sの終端文字直前までの文字列がコピーされる。\r
+ //(len < 0)のときは、NULLを返す。また、結果として(len < 0)となった時も同様にNULLを返す。\r
char *retstr;\r
CHNLIB_String *retstrtag;\r
\r
int utf8type;\r
\r
if(s == NULL){\r
- CHNLIB_ReportError("Null s[]\n", __FILE__, __LINE__, __FUNCTION__);\r
+ CHNLIB_ReportError("Null s[]\n", CHNLIB_DEBUG_ARGUMENTS);\r
return NULL;\r
}\r
\r
return NULL;\r
}\r
\r
- str = CHNLIB_System_AllocateMemory_Strict(i, __FILE__, __LINE__, __FUNCTION__);\r
+ str = CHNLIB_System_AllocateMemory_Strict(i, CHNLIB_DEBUG_ARGUMENTS);\r
\r
for(i = 0; s[i + start] != '\0'; i++){\r
if(len <= 0){\r
int i;\r
\r
if(s == NULL || search == NULL){\r
- CHNLIB_ReportError("Null str.\n", __FILE__, __LINE__, __FUNCTION__);\r
+ CHNLIB_ReportError("Null str.\n", CHNLIB_DEBUG_ARGUMENTS);\r
return False;\r
}\r
\r
int i;\r
\r
if(s == NULL || search == NULL){\r
- CHNLIB_ReportError("Null str.\n", __FILE__, __LINE__, __FUNCTION__);\r
+ CHNLIB_ReportError("Null str.\n", CHNLIB_DEBUG_ARGUMENTS);\r
return False;\r
}\r
\r
int i;\r
\r
if(s == NULL || search == NULL){\r
- CHNLIB_ReportError("Null str.\n", __FILE__, __LINE__, __FUNCTION__);\r
+ CHNLIB_ReportError("Null str.\n", CHNLIB_DEBUG_ARGUMENTS);\r
return 0;\r
}\r
\r
int i;\r
\r
if(s == NULL || search == NULL){\r
- CHNLIB_ReportError("Null str.\n", __FILE__, __LINE__, __FUNCTION__);\r
+ CHNLIB_ReportError("Null str.\n", CHNLIB_DEBUG_ARGUMENTS);\r
return 0;\r
}\r
\r
{\r
CHNLIB_String *tag;\r
\r
- tag = (CHNLIB_String *)CHNLIB_System_AllocateMemory_Strict(sizeof(CHNLIB_String), __FILE__, __LINE__, __FUNCTION__);\r
+ tag = (CHNLIB_String *)CHNLIB_System_AllocateMemory_Strict(sizeof(CHNLIB_String), CHNLIB_DEBUG_ARGUMENTS);\r
\r
CHNLIB_StructureHeader_Initialize(&tag->header, CHNLIB_STRUCT_ID_String);\r
\r