5 // Created by 西田 耀 on 13/01/28.
\r
6 // Copyright (c) 2013年 Hikaru Nishida. All rights reserved.
\r
9 #ifndef AI003_chnlib_h
\r
10 #define AI003_chnlib_h
\r
13 //Set compile environment
\r
16 #define CHNLIB_MAKE_GCC_MAC
\r
17 //#define CHNLIB_MAKE_BCC_WIN
\r
19 #ifdef CHNLIB_MAKE_BCC_WIN
\r
21 #ifndef __FUNCTION__
\r
22 #define __FUNCTION__ "Unknown"
\r
26 #define CHNLIB_DEBUG_ARGUMENTS __FILE__, __LINE__, __FUNCTION__
\r
29 //#define DEBUG_MEMORY_ALLOCATION
\r
30 //#define DEBUG_MEMORY_REFERENCE_COUNT
\r
31 //#define DEBUG_STRING_STRICT
\r
38 typedef unsigned char uchar;
\r
39 typedef unsigned short ushort;
\r
40 typedef unsigned int uint;
\r
42 typedef struct CHNLIB_STRUCTURE_HEADER CHNLIB_StructureHeader;
\r
43 struct CHNLIB_STRUCTURE_HEADER {
\r
47 uint referenceCount;
\r
48 void (*destructor)(void **structrue);
\r
49 uint (*getHash)(const void *structure);
\r
53 //Define library values
\r
56 #define CHNLIB_STRUCTURE_SIGNATURE ((uint)0x4C4E4843) //"CHNL"(Little Endian)
\r
61 #define CHNLIB_STRUCT_ID_Null 0
\r
62 #define CHNLIB_STRUCT_ID_UIPArray 1
\r
63 #define CHNLIB_STRUCT_ID_String 2
\r
65 #define CHNLIB_MAX_STRING_LENGTH 4096
\r
67 #define CHNLIB_UIPArray_INDEX_NOTFOUND -1
\r
69 #define retain(structure) CHNLIB_Retain((void **) &structure)
\r
70 #define release(structure) CHNLIB_Release((void **) &structure)
\r
71 #define autorelease(structure) CHNLIB_AutoRelease(structure)
\r
74 //Declare library functions
\r
77 void CHNLIB_Debug(const char format[], const char filename[], int line, const char funcname[], ...);
\r
78 void CHNLIB_Debug_PrintStructureData(void *structure, uint level);
\r
79 void CHNLIB_ReportError(const char format[], const char filename[], int line, const char funcname[], ...); //("", CHNLIB_DEBUG_ARGUMENTS);
\r
80 void CHNLIB_StructureHeader_Initialize(CHNLIB_StructureHeader *header, uint typeid);
\r
81 uint CHNLIB_StructureHeader_GetTypeID(const void *structure);
\r
82 uint CHNLIB_StructureHeader_GetHash(const void *structure);
\r
83 void *CHNLIB_System_AllocateMemory_Strict(int size, const char filename[], int line, const char funcname[]);
\r
84 void CHNLIB_System_FreeMemory(void *p, const char filename[], int line, const char funcname[]);
\r
85 void CHNLIB_Retain(void **structure);
\r
86 void CHNLIB_Release(void **structure);
\r
87 void *CHNLIB_AutoRelease(void *structure);
\r
89 typedef struct CHNLIB_UIPARRAY CHNLIB_UIPArray;
\r
90 struct CHNLIB_UIP_ARRAY;
\r
92 CHNLIB_UIPArray *CHNLIB_UIPArray_Initialize(void);
\r
94 int CHNLIB_UIPArray_AppendLast(CHNLIB_UIPArray **array, uint data32, void *pointer);
\r
95 int CHNLIB_UIPArray_AppendLast_ProtectFromDuplication(CHNLIB_UIPArray **array, uint data32, void *pointer, int (*IsDuplicated)(const void *listtag, const void *newtag));
\r
97 int CHNLIB_UIPArray_RemoveByIndex(CHNLIB_UIPArray **array, int index);
\r
99 void CHNLIB_UIPArray_FreeOnlyArray(CHNLIB_UIPArray **array);
\r
100 void CHNLIB_UIPArray_FreeOnlyAllPointer(CHNLIB_UIPArray *array);
\r
101 void CHNLIB_UIPArray_FreeOnlySelectedPointer(CHNLIB_UIPArray *array);
\r
102 void CHNLIB_UIPArray_FreeAll(CHNLIB_UIPArray **array);
\r
103 void CHNLIB_UIPArray_FreeSelectedAll(CHNLIB_UIPArray **array);
\r
105 int CHNLIB_UIPArray_GetNumberOfDatas(const CHNLIB_UIPArray *array);
\r
107 uint CHNLIB_UIPArray_GetData32ByIndex(const CHNLIB_UIPArray *array, int index);
\r
108 uint CHNLIB_UIPArray_SetData32ByIndex(CHNLIB_UIPArray *array, int index, uint data32);
\r
110 void *CHNLIB_UIPArray_GetPointerByIndex(const CHNLIB_UIPArray *array, int index);
\r
111 void *CHNLIB_UIPArray_GetPointerByData32(const CHNLIB_UIPArray *array, uint data32);
\r
113 int CHNLIB_UIPArray_GetIndexByData32(const CHNLIB_UIPArray *array, uint data32);
\r
115 CHNLIB_UIPArray *CHNLIB_UIPArray_CopyArray(const CHNLIB_UIPArray *source);
\r
116 //----配列のソートしたものを新たに取得
\r
117 CHNLIB_UIPArray *CHNLIB_UIPArray_GetSortedInDescendingOrderByData32(const CHNLIB_UIPArray *array);
\r
120 typedef struct CHNLIB_STRING CHNLIB_String;
\r
121 struct CHNLIB_STRING;
\r
123 CHNLIB_String *CHNLIB_String_Initialize(const char str[]);
\r
124 CHNLIB_String *CHNLIB_String_InitializeWithFormat(const char format[], ...);
\r
126 void CHNLIB_String_Free(CHNLIB_String *strtag);
\r
128 int CHNLIB_String_SetStringFromCString(CHNLIB_String *strtag, const char s[]);
\r
130 int CHNLIB_String_Print(CHNLIB_String *strtag);
\r
132 const char *CHNLIB_String_GetReferencePointerOfCString(const CHNLIB_String *strtag);
\r
134 CHNLIB_String *CHNLIB_String_ExtractByLength(const CHNLIB_String *strtag, int start, int len);
\r
136 CHNLIB_String *CHNLIB_String_Concatenate(const CHNLIB_String *s1, const CHNLIB_String *s2);
\r
138 int CHNLIB_String_GetLength(const CHNLIB_String *strtag);
\r
140 void CHNLIB_String_DeleteLastCRLF(CHNLIB_String *strtag);
\r
142 int CHNLIB_String_CompareStringWithCString(const CHNLIB_String *s, const char search[]);
\r
143 int CHNLIB_String_CompareString_Strict(const CHNLIB_String *s, const CHNLIB_String *search);
\r
145 uint CHNLIB_String_GetCountOfContain(const CHNLIB_String *s, const CHNLIB_String *search);
\r
147 CHNLIB_String *CHNLIB_String_Copy(const CHNLIB_String *s);
\r
148 //----低レベルCString関数
\r
149 int CHNLIB_CString_GetByteLength(const char s[]);
\r
150 void CHNLIB_CString_DeleteLastCRLF(char s[]);
\r
151 char *CHNLIB_CString_ExtractByLength(const char s[], int start, int len);
\r
152 int CHNLIB_CString_CompareString(const char s[], const char search[]);
\r
153 int CHNLIB_CString_CompareString_Strict(const char s[], const char search[]);
\r
154 int CHNLIB_CString_CompareString_LeftHand(const char s[], const char search[]);
\r
155 char *CHNLIB_CString_Copy(const char s[]);
\r
156 char *CHNLIB_CString_Concatenate(const char s1[], const char s2[]);
\r
158 int CHNLIB_String_Search_UIPArrayStringLocation(const CHNLIB_String *s, int s_start, const CHNLIB_UIPArray *list, int *location);
\r
159 int CHNLIB_UIPArray_GetSeparatedStringByUIPArray(CHNLIB_UIPArray **separated, const CHNLIB_UIPArray *list, const CHNLIB_String *s);
\r
160 int CHNLIB_UIPArray_GetSeparatedUTF8Character(CHNLIB_UIPArray **separated, const CHNLIB_String *s);
\r
161 CHNLIB_String *CHNLIB_ReadLine(FILE *fp);
\r
164 void CHNLIB_Environment_SetCurrentWorkingDirectory(const char apppath[]);
\r
165 const char *CHNLIB_Environment_GetFilenameFromPath(const char path[]);
\r
168 int CHNLIB_UTF8_GetCharacterType(char c);
\r
169 int CHNLIB_UTF8_GetStringLengthByCharacter(const char s[]);
\r
170 uint CHNLIB_UTF8_GetNextUnicodeOfCharacter(const char s[], const char **next);
\r
171 int CHNLIB_UTF8_CompareString(const char s[], const char search[]);
\r
172 int CHNLIB_UTF8_CompareString_LeftHand(const char s[], const char search[]);
\r
173 int CHNLIB_UTF8_GetByteSizeFromLengthByCharacter(const char s[], int start, int end);
\r
174 uint CHNLIB_UTF8_GetCountOfContain(const char s[], const char search[]);
\r