Exemple #1
0
		~basic_table_iterator() {
			if (keyidx != -1) {
				stack::remove(ref.lua_state(), keyidx, 1);
			}
			if (ref.valid()) {
				stack::remove(ref.lua_state(), tableidx, 1);
			}
		}
Exemple #2
0
		basic_table_iterator(reference_type x) : ref(std::move(x)) {
			ref.push();
			tableidx = lua_gettop(ref.lua_state());
			stack::push(ref.lua_state(), nil);
			this->operator++();
			if (idx == -1) {
				return;
			}
			--idx;
		}
    basic_table_iterator& operator++() {
        if (idx == -1)
            return *this;

        if (lua_next(ref.lua_state(), tableidx) == 0) {
            idx = -1;
            return *this;
        }
        ++idx;
        kvp.first = object(ref.lua_state(), -2);
        kvp.second = object(ref.lua_state(), -1);
        lua_pop(ref.lua_state(), 1);
        // leave key on the stack
        return *this;
    }
Exemple #4
0
    static size_type alphabet_size_and_map(reference_type rac, size_type n, map_type& map, inv_map_type& inv_map, value_type& first_symbol) {
        map.clear();
        inv_map.clear();
        if (n==0) {
            for (size_type i=0; i<256; ++i) {
                map[i] = 255;    // mark each symbol as absent
            }
            return 0;
        }
        if (rac.size() < n) {
            throw std::logic_error("wt<int_vector_buffer<8> >: n > rac.size()!");
            return 0;
        }

        for (size_type i=0; i<256; ++i) {
            map[i] = 0;
        }

        size_type alphabet_size = 0;
        first_symbol = rac[0];
        for (size_type i=0; i < n; ++i) {
            value_type c = rac[i];
            map[c] = 1;
        }

        for (size_type i=0; i<256; ++i) {
            if (map[i]) {
                map[i] = alphabet_size;
                ++alphabet_size;
            } else {
                map[i] = 255;
            }
            inv_map[map[i]] = i;
        }
        return alphabet_size;
    }