void print(const dynamic_bitset<>& items, ostream& out) {
	out << "{ ";
	for(dynamic_bitset<>::size_type i = items.find_first(); i != items.npos; i = items.find_next(i)){
		out << i << " ";
	}
	out << "} -- " << items.count() << endl;
}
Esempio n. 2
0
static
std::string dumpStates(const dynamic_bitset<> &s) {
    std::ostringstream oss;
    for (size_t i = s.find_first(); i != s.npos; i = s.find_next(i)) {
        oss << i << " ";
    }
    return oss.str();
}
Esempio n. 3
0
static
flat_set<NFAVertex> getVertices(const dynamic_bitset<> &in,
                                const vector<StateInfo> &info) {
    flat_set<NFAVertex> out;
    for (size_t i = in.find_first(); i != in.npos; i = in.find_next(i)) {
        out.insert(info[i].vertex);
    }
    return out;
}
Esempio n. 4
0
static
void step(const NGHolder &g, const vector<StateInfo> &info,
          const dynamic_bitset<> &in, dynamic_bitset<> *out) {
    out->reset();
    for (size_t i = in.find_first(); i != in.npos; i = in.find_next(i)) {
        NFAVertex u = info[i].vertex;
        for (auto v : adjacent_vertices_range(u, g)) {
            out->set(g[v].index);
        }
    }
}
Esempio n. 5
0
typename allocator<T>::size_type allocator<T>::find_free_memory(const dynamic_bitset & memfree, dynamic_bitset & mask)
{
	/* search mask in memfree */
	const size_type needed_mem_size = mask.count();
	if (memfree.count() < needed_mem_size) {
#		if DEBUG_SMA_TRACE_FIND_FREE_MEM
		std::cout << "not enough free memory found" << std::endl;
#		endif
		return memfree.size();
	}
	assert(needed_mem_size <= memfree.size());
	const size_type asize = memfree.size() - needed_mem_size;
	size_type pos = 0;
	while (pos <= asize) {
#		if DEBUG_SMA_TRACE_FIND_FREE_MEM
		std::cout << "pos:     " << pos << "/" << asize << std::endl;
		std::cout << "mask:    " << mask << std::endl;
		std::cout << "memfree: " << memfree << std::endl;
#		endif
		/* check if enough memory is free in interval [pos, pos+needed_mem_size) */
		if ((memfree & mask) == mask) {
			/* free memory found */
#			if DEBUG_SMA_TRACE_FIND_FREE_MEM
			std::cout << "free memory found at pos=" << pos << std::endl;
#			endif
			return pos;
		} else {
			/* increment pos for next iteration */
#			if DEBUG_SMA_TRACE_FIND_FREE_MEM
			std::cout << "memfree:  " << memfree << "    "
				  << memfree << std::endl;
			std::cout << "inc mask: " << mask << " -> ";
#			endif
			const size_type oldpos = pos;
			pos = memfree.find_next(oldpos);
			assert(pos >= oldpos);
			mask <<= pos - oldpos;
#			if DEBUG_SMA_TRACE_FIND_FREE_MEM
			std::cout << mask << std::endl;
			std::cout << "pos: " << oldpos << " -> "
				  << pos << std::endl;
#			endif
			assert(mask.count() == needed_mem_size);
		}
	}
	/* no free memory found */
#	if DEBUG_SMA_TRACE_FIND_FREE_MEM
	std::cout << "not enough free memory found" << std::endl;
#	endif
	return memfree.size();
}