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;
	}
Exemple #3
0
/**
 * 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));
	}