20namespace seqan3::contrib
27template <
typename TValue>
30 typedef ConcurrentQueue<TValue *, Suspendable<>> TStack;
31 typedef typename TStack::TSize TSize;
35 ResourcePool(TSize maxSize)
37 setWriterCount(recycled, 1);
38 for (; maxSize != 0; --maxSize)
39 appendValue(recycled, (TValue *)NULL);
44 unlockWriting(recycled);
47 while (popBack(ptr, recycled))
60template <
typename TValue>
64 SerializerItem *
next;
72template <
typename TValue,
typename TWorker>
76 typedef SerializerItem<TValue> TItem;
77 typedef TItem * TItemPtr;
78 typedef ResourcePool<TItem> TPool;
88 Serializer() : first(NULL), last(NULL), stop(false)
91 template <
typename TArg>
92 explicit Serializer(TArg & arg, TSize maxItems = 1024) :
102 while (first != NULL)
104 TItemPtr item = first;
124template <
typename TValue>
125inline TValue * aquireValue(ResourcePool<TValue> & me)
128 if (!popBack(ptr, me.recycled))
141template <
typename TValue>
142inline void releaseValue(ResourcePool<TValue> & me, TValue * ptr)
144 appendValue(me.recycled, ptr);
151template <
typename TValue,
typename TWorker>
152inline void clear(Serializer<TValue, TWorker> & me)
155 while (me.first != NULL)
157 TValue * item = me.first;
158 me.first = me.first->next;
159 releaseValue(me.recycled, item);
171template <
typename TValue,
typename TWorker>
172inline TValue * aquireValue(Serializer<TValue, TWorker> & me)
174 typedef SerializerItem<TValue> TItem;
176 TItem * item = aquireValue(me.pool);
183 if (me.first == NULL)
186 me.last->next = item;
196template <
typename TValue,
typename TWorker>
197inline bool releaseValue(Serializer<TValue, TWorker> & me, TValue * ptr)
199 typedef SerializerItem<TValue> TItem;
201 TItem * item =
reinterpret_cast<TItem *
>(ptr);
202 assert(!item->ready);
211 if (item != me.first)
217 assert(me.first != NULL);
223 success = me.worker(item->val);
228 me.first = item->next;
231 releaseValue(me.pool, item);
235 if (item == NULL || !item->ready)
constexpr ptrdiff_t count
Count the occurrences of a type in a pack.
Definition type_pack/traits.hpp:164
Provides seqan suspendable queue.