14 #include <dispatch/dispatch.h>
23 template<
typename KeyType,
typename InstanceType>
33 void visit(
void (^b)(KeyType,InstanceType));
34 unsigned int size(
void);
37 std::string instanceTypeString;
39 dispatch_queue_t queue;
40 typedef std::map<KeyType,InstanceType> PoolType;
47 #define VUOKEYEDPOOL(keyType,instanceType) extern VuoKeyedPool<keyType, instanceType> * instanceType ## Pool
56 #define VUOKEYEDPOOL_DEFINE(keyType,instanceType,allocate) VuoKeyedPool<keyType, instanceType> * instanceType ## Pool = new VuoKeyedPool<keyType, instanceType>(#instanceType, allocate)
61 template<
typename KeyType,
typename InstanceType>
65 this->instanceTypeString = instanceTypeString;
66 this->allocate = allocate;
67 this->queue = dispatch_queue_create(instanceTypeString.c_str(), NULL);
75 template<
typename KeyType,
typename InstanceType>
79 __block InstanceType instance;
80 dispatch_sync(queue, ^{
81 typename PoolType::iterator it = pool.find(key);
83 instance = it->second;
86 instance = allocate(key);
99 template<
typename KeyType,
typename InstanceType>
103 dispatch_sync(queue, ^{
113 template<
typename KeyType,
typename InstanceType>
116 dispatch_sync(queue, ^{
117 for (
typename PoolType::iterator i = pool.begin(); i != pool.end(); ++i)
118 b(i->first, i->second);
127 template<
typename KeyType,
typename InstanceType>
130 __block
unsigned int c;
131 dispatch_sync(queue, ^{