24 lines
585 B
Plaintext
24 lines
585 B
Plaintext
|
};
|
||
|
|
||
|
int do_precomposition(int base, int comb) {
|
||
|
int min = 0;
|
||
|
int max = sizeof(precompositions) / sizeof(precompositions[0]) - 1;
|
||
|
int mid;
|
||
|
unsigned int sought = ((unsigned)base << 16) | (unsigned)comb, that;
|
||
|
|
||
|
/* binary search */
|
||
|
while (max >= min) {
|
||
|
mid = (min + max) / 2;
|
||
|
that = ((unsigned)precompositions[mid].base << 16) | ((unsigned)precompositions[mid].comb);
|
||
|
if (that < sought) {
|
||
|
min = mid + 1;
|
||
|
} else if (that > sought) {
|
||
|
max = mid - 1;
|
||
|
} else {
|
||
|
return precompositions[mid].replacement;
|
||
|
}
|
||
|
}
|
||
|
/* no match */
|
||
|
return -1;
|
||
|
}
|