Example #1
0
typename object_pool_t<Object>::pobject_t object_pool_t<Object>::acquire() {
    boost::mutex::scoped_lock lock(map_lock);

    typename object_map_t::iterator i = object_map.begin();
    while (i != object_map.end() && i->second)
	i++;
    if (i != object_map.end()) {
	i->second = true;
	return i->first;
    } else if (object_map.size() < pool_size) {
	pobject_t result = gen();
	object_map.insert(map_entry_t(result, true));
	return result;
    } else
	return pobject_t();
}
Example #2
0
object_pool_t<Object>::object_pool_t(
    boost::function<pobject_t()> gen,
    unsigned int pool_size) {
    for (unsigned int i = 0; i < pool_size; i++)
	object_map.insert(map_entry_t(gen(), false));
}