- TagType Tag(treeNode x) {\r
- if (tags_blen == 8)\r
- return (TagType) (((uchar*)tags_fix)[(int) x]);\r
- else\r
- return (TagType) get_field(tags_fix,tags_blen, (int) x);\r
+ inline TagType Tag(treeNode x) const throw () {\r
+ if (tags_blen == 8)\r
+ return (TagType) (((uchar*)tags_fix)[(int) x]);\r
+ else { \r
+ size_t idxlen = x * tags_blen;\r
+ size_t j = idxlen % W;\r
+ size_t i = idxlen / W; \r
+ size_t offset = W - tags_blen;\r
+ size_t offset2 = offset - j;\r
+ size_t w = tags_fix[i];\r
+ return (offset2 >= 0)\r
+ ? ( w << offset2 ) >> offset\r
+ : ( w >> j) | (tags_fix[i+1] << (W+offset2)) >> offset;\r
+ }; \r
+\r