#include #include #include "runecompose.h" /* assume 16-bit runes! */ static uint* bsearchi(uint c, uint *t, int n, int ne) { uint *p; int m; while(n > 1) { m = n/2; p = t + m*ne; if(c >= p[0]) { t = p; n = n-m; } else n = m; } if(n && c == t[0]) return t; return 0; } int runecompose(Rune b, Rune c) { uint *p; p = bsearchi(b<<16 | c, __combine2, nelem(__combine2)/2, 2); if(p) return p[1]; return -1; }