csnip  0.1
find.h
Go to the documentation of this file.
1 #ifndef CSNIP_FIND_H
2 #define CSNIP_FIND_H
3 
57 #define csnip_Bsearch(itype, u, au_lessthan_key, N, ret) \
58  do { \
59  /* loop invariants:
60  * a[0], ..., a[lo - 1] < key;
61  * a[hi], ..., a[N - 1] >= key;
62  */ \
63  itype lo = 0; \
64  itype hi = (N); \
65  while (hi != lo) { \
66  itype u = lo + (hi - lo)/2; \
67  if (au_lessthan_key) { \
68  lo = (u) + 1; \
69  } else { \
70  hi = (u); \
71  } \
72  } \
73  \
74  (ret) = hi; \
75  } while(0)
76 
79 #endif /* CSNIP_FIND_H */
80 
81 #if defined(CSNIP_SHORT_NAMES) && !defined(CSNIP_FIND_HAVE_SHORT_NAMES)
82 #define Bsearch csnip_Bsearch
83 #define CSNIP_FIND_HAVE_SHORT_NAMES
84 #endif /* CSNIP_SHORT_NAMES && ! CSNIP_FIND_HAVE_SHORT_NAMES */