} else if(CHNLIB_String_CompareStringWithCString(temp, "exit")){\r
break;\r
} else if(CHNLIB_String_CompareStringWithCString(temp, "wordlist")){\r
- sorted = CHNLIB_UIPArray_SortInDescendingOrderByData32(WorkingSet.RootWordList);\r
+ sorted = CHNLIB_UIPArray_GetSortedInDescendingOrderByData32(WorkingSet.RootWordList);\r
i_max = CHNLIB_UIPArray_GetNumberOfDatas(sorted);\r
for(i = 0; i < i_max; i++){\r
printf("word%3d:%3d:%s\n", i, CHNLIB_UIPArray_GetData32ByIndex(sorted, i), CHNLIB_String_GetReferencePointerOfCString(CHNLIB_UIPArray_GetPointerByIndex(sorted, i)));\r
}\r
- CHNLIB_UIPArray_FreeOnlyArray(&sorted);\r
+ //CHNLIB_UIPArray_FreeOnlyArray(&sorted);\r
+ release(sorted);\r
} else if(CHNLIB_String_CompareStringWithCString(temp, "readfile")){\r
//::readfile:filename\r
readfp = fopen(CHNLIB_String_GetReferencePointerOfCString(CHNLIB_UIPArray_GetPointerByIndex(separated, 4)), "rb");\r
}\r
}\r
\r
- //WorkingSet.SystemWordList0を使っているので、解放しないように注意\r
- CHNLIB_UIPArray_FreeSelectedAll(&separated);\r
+ ////WorkingSet.SystemWordList0を使っているので、解放しないように注意\r
+ //CHNLIB_UIPArray_FreeSelectedAll(&separated);\r
+ release(separated);\r
}\r
\r
if(!passthink){\r
//::readfile:AITestData_ja.txt\r
AI_Think_LearnWordFromInputString(input);\r
\r
- CHNLIB_UIPArray_AppendLast(&WorkingSet.InputHistory, CHNLIB_UIPArray_GetNumberOfDatas(WorkingSet.InputHistory), input);\r
+ //入力履歴を追加\r
+ i = CHNLIB_UIPArray_AppendLast(&WorkingSet.InputHistory, 0, input);\r
+ if(i > AI_INPUT_HISTORY_MAX){\r
+ //履歴の整理\r
+ for(i = 0; i < AI_INPUT_HISTORY_MAX; i++){\r
+ CHNLIB_UIPArray_RemoveByIndex(&WorkingSet.InputHistory, 0);\r
+ }\r
+ }\r
}\r
+ \r
+ release(input);\r
}\r
\r
return 0;\r
tagIndex = AI_Memory_AddRootWordData(CHNLIB_UIPArray_GetPointerByIndex(candidateWordList, i));\r
\r
CHNLIB_UIPArray_SetData32ByIndex(WorkingSet.RootWordList, tagIndex, CHNLIB_UIPArray_GetData32ByIndex(WorkingSet.RootWordList, tagIndex) + CHNLIB_UIPArray_GetData32ByIndex(candidateWordList, i));\r
- \r
- if(tagIndex <= maxExistingWordIndex){\r
- //既存のタグなので、解放されるようにdata32をFalseにしておく。\r
- CHNLIB_UIPArray_SetData32ByIndex(candidateWordList, i, False);\r
- }\r
- //新規追加されたタグについては0以上の値つまりTrueが設定されているはずなので、解放されない。\r
}\r
- //data32 == Falseのタグ、つまり既存のタグと同じだったもののみ解放する。\r
- CHNLIB_UIPArray_FreeSelectedAll(&candidateWordList);\r
+ //すでに存在したタグは追加されていないため、ReferenceCountが1のはずなので、解放される。\r
+ //追加されたタグはReferenceCountが2のため、解放されない。\r
+ release(candidateWordList);\r
+ //CHNLIB_UIPArray_FreeSelectedAll(&candidateWordList);\r
\r
return;\r
}\r
}\r
}\r
if(candidatelength > 0){\r
- CHNLIB_UIPArray_AppendLast_ProtectFromDuplication(&candidatewordlist, 0, CHNLIB_String_ExtractByLength(input, CHNLIB_UTF8_GetByteSizeFromLengthByCharacter(cstr_input, 0, k - 1), CHNLIB_UTF8_GetByteSizeFromLengthByCharacter(cstrp_input, 0, candidatelength - 1)), &AI_Memory_AddRootWordData_IsDuplicated);\r
+ CHNLIB_UIPArray_AppendLast_ProtectFromDuplication(&candidatewordlist, 0, autorelease(CHNLIB_String_ExtractByLength(input, CHNLIB_UTF8_GetByteSizeFromLengthByCharacter(cstr_input, 0, k - 1), CHNLIB_UTF8_GetByteSizeFromLengthByCharacter(cstrp_input, 0, candidatelength - 1))), &AI_Memory_AddRootWordData_IsDuplicated);\r
}\r
CHNLIB_UTF8_GetNextUnicodeOfCharacter(cstrp_input, &cstrp_input);\r
}\r
{\r
//WorkingSetを初期化する。\r
WorkingSet.SystemWordList0 = CHNLIB_UIPArray_Initialize();\r
- CHNLIB_UIPArray_AppendLast(&WorkingSet.SystemWordList0, True, CHNLIB_String_Initialize(":"));\r
- CHNLIB_UIPArray_AppendLast(&WorkingSet.SystemWordList0, True, CHNLIB_String_Initialize(","));\r
+ CHNLIB_UIPArray_AppendLast(&WorkingSet.SystemWordList0, True, autorelease(CHNLIB_String_Initialize(":")));\r
+ CHNLIB_UIPArray_AppendLast(&WorkingSet.SystemWordList0, True, autorelease(CHNLIB_String_Initialize(",")));\r
\r
WorkingSet.InputHistory = CHNLIB_UIPArray_Initialize();\r
\r
fclose(fp);\r
\r
fp = fopen(CHNLIB_String_GetReferencePointerOfCString(currentfilename), "rb");\r
+ release(currentfilename);\r
\r
WorkingSet.RootWordList = CHNLIB_UIPArray_Initialize();\r
for(i = 1; ;i++){\r
break;\r
}\r
CHNLIB_UIPArray_AppendLast(&WorkingSet.RootWordList, i, line);\r
- //CHNLIB_String_Free(line);リストに登録している実体なので解放の必要なし!\r
+ release(line);\r
}\r
fclose(fp);\r
- CHNLIB_String_Free(currentfilename);\r
- \r
- //CHNLIB_Debug_PrintStructureData(WorkingSet.RootWordList, 0);\r
\r
return;\r
}\r