void for_each_dest_rev(state_id_t curr, OP op) const { assert(curr < states.size()); size_t i, n; if (get_pzip_bit(curr)) { state_id_t dest = states[curr].u.s.dest; if (get_last_bit(curr)) i = curr; else { i = curr + zpath_slots(curr); } n = 1; } else { i = size_t(curr)-1; n = 0; } do { ++i; ++n; assert(i < states.size()); state_id_t dest = states[i].u.s.dest; } while (!get_last_bit(i)); if (1 == n) { state_id_t dest = states[curr].u.s.dest; if (null_state != dest) op(curr, dest); } else if (get_pzip_bit(curr)) { for(size_t j = 0; j < n-1; ++j) { size_t k = i - j; state_id_t dest = states[k].u.s.dest; assert(null_state != dest); op(curr, dest); } state_id_t dest = states[curr].u.s.dest; assert(null_state != dest); op(curr, dest); } else { for(size_t j = 0; j < n; ++j) { size_t k = i - j; state_id_t dest = states[k].u.s.dest; assert(null_state != dest); op(curr, dest); } } }
state_id_t state_move(state_id_t curr, unsigned char ch) const { assert(curr < states.size()); size_t i; if (get_pzip_bit(curr)) { if (ch == states[curr].u.s.ch) return states[curr].u.s.dest; if (get_last_bit(curr)) return null_state; i = curr + zpath_slots(curr); } else { i = size_t(curr)-1; } do { ++i; assert(i < states.size()); if (ch == states[i].u.s.ch) return states[i].u.s.dest; } while (!get_last_bit(i)); return null_state; }
/** * print the bits of a number * @params number - the number we want to print his bits * @returns void - print the number of bits (doesn't return anything) */ void print_bit(unsigned int number) { int i = 0; while (i < int_length()) { printf("%d", get_last_bit(number)); number >>= 1; i++; } printf("\n"); }
void for_each_dest(state_id_t curr, OP op) const { assert(curr < states.size()); size_t i; if (get_pzip_bit(curr)) { state_id_t dest = states[curr].u.s.dest; if (null_state != dest) op(curr, dest); if (get_last_bit(curr)) return; i = curr + zpath_slots(curr); } else { i = size_t(curr)-1; } do { ++i; assert(i < states.size()); state_id_t dest = states[i].u.s.dest; if (null_state != dest) op(curr, dest); } while (!get_last_bit(i)); }