Ну вот, после моих переделок текст, который раньше переводился в Вакане минуту 10 секунд, переводится за 5 секунд.
Хо-хо!
Полюбуйтесь, что для этого пришлось нагородить:
Это я здесь сравниваю строки из 4-символов (4 байта на хекс-код).
Хо-хо!
Полюбуйтесь, что для этого пришлось нагородить:
{$IFDEF INTEGER_HELL}
{
Note on integer comparison optimization:
We're not checking if roma_t[i].hiragana has one or two 4-chars.
It's okay. If it has one, then roma_t[i].hiragana[5]==#00, and it wouldn't match
to any 4-char hex combination.
It also won't AV because the memory's dword aligned and hiragana[5] is accessible already.
}
if ((pinteger(ps)^=pinteger(roma_t[i].hiragana_ptr)^)
and (pinteger(integer(ps)+4)^=pinteger(integer(roma_t[i].hiragana_ptr)+4)^))
or ((pinteger(ps)^=pinteger(roma_t[i].katakana_ptr)^)
and (pinteger(integer(ps)+4)^=pinteger(integer(roma_t[i].katakana_ptr)+4)^)) then begin
{$ELSE}
if FcharCmp(ps, roma_t[i].hiragana_ptr, 2)
or FcharCmp(ps, roma_t[i].katakana_ptr, 2) then begin
{$ENDIF}Это я здесь сравниваю строки из 4-символов (4 байта на хекс-код).
-
-
22.11.2012 в 15:15-
-
22.11.2012 в 17:06-
-
22.11.2012 в 18:11А что это за язык?
Дельфя вроде)
-
-
22.11.2012 в 18:59if (Uppercase(curkana)=Uppercase(roma[i])) then(эта строчка выполняется 280 899 647 раз на моём тексте, и 280 899 647 раз одни и те же строки переводились в верхний регистр...)
А с нулём всё оказалось просто. Гипотезы перевода хранятся в формате [1 символ приоритет][2 символа длина][1 символ буква тип слова][гипотеза]. Если длина меньше десяти, то её надо предварить нулём...
Разумеется, я просто написал нормальное хранилище для гипотез, в виде структур а не форматированных строк.
se.Add(max(9-j, 0), i, 'F', copy(_s,1,i*4));-
-
23.11.2012 в 14:25-
-
23.11.2012 в 14:50Yoku Wakaru Gendai Mahou :3
-
-
26.11.2012 в 00:34-
-
26.11.2012 в 01:11