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(); }
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)); }