+int xrow_find(xrow_t*r, int32_t x)
+{
+ int min, max, i, l;
+
+ for(min=0, max=r->num, i=r->num/2, l=r->num; i != l; l=i, i=(min+max)/2) {
+ if(x < r->x[i]) max=i;
+ else min=i;
+ }
+
+#ifdef CHECKS
+ int t;
+ for(t=0;t<r->num;t++) {
+ if(x < r->x[t])
+ break;
+ }
+ assert(max == t);
+#endif
+
+ return max;
+}
+
+char xrow_contains(xrow_t*r, int32_t x)
+{
+ int pos = xrow_find(r,x) - 1;
+ return (pos>=0 && r->x[pos]==x);
+}
+