#include <u.h>
#include <libc.h>
#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;
}
|