int str_comp(const char* str1, const char* str2)
{
while(*str1 && *str2)
if(*str1++ != *str2++)
break;
return *str1 < *str2 ? -1 : (*str2 < *str1 ? 1 : 0);
}
Ha még ennél is hatékonyabbat akartunk, akkor ott volt az assembly, valami ehhez hasonló:
repnz cmpsb, s aztán a végén je, jl, jg. Még igényesebbek persze nem szarakodtak byteonként, ha ismert volt a stringek hossza, hanem cmpsb/cmpsw-vel a duplaszóhatárig hasonlítottak, aztán onnan repnz cmpsd. Természetesen a cmpsb is sokkal gyorsabb az utóbbinál ha nem ismertek a hosszak, ugyanis nem érdemes megszámolni, túl időigényes.Aztán változtak a dolgok, és nem lett sikk gyors kódot írni, mindenki a különböző class libraryk stringosztályait használta, ami végülis az assembly nyelvű string comparehez nyúlt le előbb-utóbb, végülis majdnem olyan gyors kódot eredményezve mintha mi írtuk volna az összehasonlítást, ellenben sokkal kényelmesebb.
Aztán a fokozódóan globalizálódó világban egyre inkább szükség volt lokalizációra, ebből születtek a kódlapok, majd a unicode. Naaztán ezzel végetért az asszembly vagy az általunk összehekkelt stringcomparálás és muszály volt a nyelv/class library által adott lehetőségekre támaszkodni.
Ezzel szívtunk ma. Mostmár collationnek hívják az összehasonlítást, és a lényege az, hogy a sorrendet táblázatokból veszi, amelyek minden nyelvhez és localehez egyediek (is) lehetnek, de akár egymásét is használhatják. Ezeknek a rendszereknek az a hasznos tulajdonságuk, hogy nem feltétlenül az aktuális locale szerint kell mindent összehasonlítanunk, hanem meg is adhatjuk, h pl mi magyar rendezést szeretnénk, és akkor az lesz, függetlenül a user kínai localejától. Elméletileg csak, ugyanis az általunk használni akart localet támogatnia kell az oprendszernek is, nem elég ha a nyelv, framework támogatja.
Nos, a Symbian külön világ. A dolgok addig szépen mennek amíg nem akarsz semmi extrát, csak a kis stringjeidet összeengedni, aztán győzzön a nagyobbik, de ha te meg is akarod adni, hogy milyen locale szerint, akkor két lehetőséged van. Mindkettő vérrel és verejtékkel szennyezett: megadhatsz egy általad felépített localet, ahol minden olyan, ahogy te szeretnéd, vagy lekérdezed a rendszer által támogatottakat és azokból a kedvedrevalót használod. Gondolom mostmár sejtitek mi fog következni: az első a mazochistáknak van, akik minden támogatott nyelvre le akarják bütykölni a 100k-s collation táblát. A második már felhasználóbarátabb, tök helyes kis metódus:
CollationMethodByIndex() vagy CollationMethodById(), amikkel le lehet kérni valamely metódust. Azonban 2 órás source és helptúrás után sem sikerült rájönni, hogy az ily módon megkapott metódusok milyen nyelvhez tartoznak. Sőt, amikor már egy K nevű class után túrtuk a filesystemet, de csak KK-t találtunk, kevés kevés mentette meg a monitorom. Aztán meglett a K is, de semmivel sem vitte előre a kis invesztigációnkat. Mert egy függvénytömb és egy count volt benne :((Második felvonás holnap, most megyek inni.

No comments:
Post a Comment