#include "bp.h"\r
+#include <algorithm>\r
+using std::min;\r
+using std::max;\r
\r
//#define CHECK\r
#define RANDOM\r
\r
int msize=0;\r
-#define mymalloc(p,n,f) {p =(__typeof__(p)) malloc((n)*sizeof(*p)); msize += (f)*(n)*sizeof(*p); /* if (f) printf("malloc %d bytes at line %d total %d\n",(n)*sizeof(*p),__LINE__,msize); */ if ((p)==NULL) {printf("not enough memory (%d bytes) in line %d\n",msize,__LINE__); exit(1);};}\r
+#define mymalloc(p,n,f) { \\r
+ p = (__typeof__(p)) malloc((n)*sizeof(*p)); \\r
+if ((p)==NULL) {printf("not enough memory (%d bytes) in line %d\n",msize,__LINE__); \\r
+ exit(1);}; \\r
+msize += (f)*(n)*sizeof(*p); \\r
+;}\r
\r
int postorder_select_bsearch(bp *b,int s);\r
\r
int childtbl[(ETW)*(1<<ETW)];\r
int childtbl2[2*ETW+1][ETW][(1<<ETW)];\r
int depthtbl[(2*ETW+1)*(1<<ETW)];\r
-\r
+int inited = 0;\r
void make_matchtbl(void)\r
{\r
int i,j,x,r;\r
int m,M;\r
pb buf[1];\r
int deg;\r
-\r
+ if (inited)\r
+ return;\r
+ inited = 1;\r
for (x = 0; x < (1<<ETW); x++) {\r
setbits(buf,0,ETW,x);\r
for (r=-ETW; r<=ETW; r++) fwdtbl[((r+ETW)<<ETW)+x] = ETW;\r
mymalloc(b->da,1,0);\r
darray_construct(b->da,n,B, opt & OPT_FAST_PREORDER_SELECT);\r
b->idx_size += b->da->idx_size;\r
- //Kim : commented this and the following ones, they polute the printing of the query answer\r
+ //Kim: comment this and the following, they polute the printing of the xpath library\r
//printf("preorder rank/select table: %d bytes (%1.2f bpc)\n",b->da->idx_size,(double)b->da->idx_size*8/n);\r
\r
make_matchtbl();\r
if (opt & OPT_LEAF) {\r
mymalloc(b->da_leaf,1,0);\r
darray_pat_construct(b->da_leaf, n, B, 2, 0x2, opt & OPT_FAST_LEAF_SELECT);\r
- printf("leaf rank/select table: %d bytes (%1.2f bpc)\n",b->da_leaf->idx_size,(double)b->da_leaf->idx_size*8/n);\r
+ //printf("leaf rank/select table: %d bytes (%1.2f bpc)\n",b->da_leaf->idx_size,(double)b->da_leaf->idx_size*8/n);\r
b->idx_size += b->da_leaf->idx_size; \r
} else {\r
b->da_leaf = NULL;\r
if (opt & OPT_INORDER) {\r
mymalloc(b->da_inorder,1,0);\r
darray_pat_construct(b->da_inorder, n, B, 2, 0x1, opt & OPT_FAST_INORDER_SELECT);\r
- printf("inorder rank/select table: %d bytes (%1.2f bpc)\n",b->da_inorder->idx_size,(double)b->da_inorder->idx_size*8/n);\r
+ //printf("inorder rank/select table: %d bytes (%1.2f bpc)\n",b->da_inorder->idx_size,(double)b->da_inorder->idx_size*8/n);\r
b->idx_size += b->da_inorder->idx_size;\r
} else {\r
b->da_inorder = NULL;\r