Momo: optimize initial search
This commit is contained in:
parent
bebb1726a9
commit
f052b4d55d
|
|
@ -522,7 +522,7 @@ int main(int argc, char** argv) {
|
||||||
} else {
|
} else {
|
||||||
logV("locale: %s",localeRet);
|
logV("locale: %s",localeRet);
|
||||||
}
|
}
|
||||||
if ((localeRet=TA_BINDTEXTDOMAIN("furnace","locale"))==NULL) {
|
if ((localeRet=TA_BINDTEXTDOMAIN("furnace","../po/locale"))==NULL) {
|
||||||
logE("could not bind text domain!");
|
logE("could not bind text domain!");
|
||||||
} else {
|
} else {
|
||||||
logV("text domain 1: %s",localeRet);
|
logV("text domain 1: %s",localeRet);
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ struct LocaleDomain {
|
||||||
const char** stringPtr;
|
const char** stringPtr;
|
||||||
const char** transPtr;
|
const char** transPtr;
|
||||||
size_t stringCount;
|
size_t stringCount;
|
||||||
|
size_t firstString[256];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MOHeader {
|
struct MOHeader {
|
||||||
|
|
@ -321,9 +322,19 @@ const char* momo_bindtextdomain(const char* domainName, const char* dirName) {
|
||||||
unsigned int* strTable=(unsigned int*)(&newDomain->mo[header->stringPtr]);
|
unsigned int* strTable=(unsigned int*)(&newDomain->mo[header->stringPtr]);
|
||||||
unsigned int* transTable=(unsigned int*)(&newDomain->mo[header->transPtr]);
|
unsigned int* transTable=(unsigned int*)(&newDomain->mo[header->transPtr]);
|
||||||
|
|
||||||
|
unsigned short curChar=0;
|
||||||
for (size_t i=0; i<newDomain->stringCount; i++) {
|
for (size_t i=0; i<newDomain->stringCount; i++) {
|
||||||
newDomain->stringPtr[i]=(const char*)(&newDomain->mo[strTable[1+(i<<1)]]);
|
newDomain->stringPtr[i]=(const char*)(&newDomain->mo[strTable[1+(i<<1)]]);
|
||||||
newDomain->transPtr[i]=(const char*)(&newDomain->mo[transTable[1+(i<<1)]]);
|
newDomain->transPtr[i]=(const char*)(&newDomain->mo[transTable[1+(i<<1)]]);
|
||||||
|
|
||||||
|
while (curChar<=(unsigned char)newDomain->stringPtr[i][0]) {
|
||||||
|
newDomain->firstString[curChar]=i;
|
||||||
|
curChar++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (curChar<256) {
|
||||||
|
newDomain->firstString[curChar]=newDomain->stringCount;
|
||||||
|
curChar++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -364,9 +375,12 @@ const char* momo_gettext(const char* str) {
|
||||||
if (curDomain==NULL) {
|
if (curDomain==NULL) {
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
if (str==NULL) return NULL;
|
||||||
// TODO: optimize
|
// TODO: optimize
|
||||||
for (size_t i=0; i<curDomain->stringCount; i++) {
|
for (size_t i=curDomain->firstString[(unsigned char)(str[0])]; i<curDomain->stringCount; i++) {
|
||||||
if (strcmp(curDomain->stringPtr[i],str)==0) return curDomain->transPtr[i];
|
if (strcmp(curDomain->stringPtr[i],str)==0) {
|
||||||
|
return curDomain->transPtr[i];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue