5 #ifndef CVMFS_UTIL_TUBE_H_
6 #define CVMFS_UTIL_TUBE_H_
59 Link *prev = cursor->
prev_;
62 }
while (cursor !=
head_);
66 pthread_mutex_destroy(&
lock_);
78 Link *link =
new Link(item);
98 Link *link =
new Link(item);
176 Link *sentinel =
new Link(NULL);
180 int retval = pthread_mutex_init(&
lock_, NULL);
193 link->prev_->next_ = link->next_;
194 link->next_->prev_ = link->prev_;
195 ItemT *item = link->item_;
244 template<
class ItemT>
250 for (
unsigned i = 0; i <
tubes_.size(); ++i)
270 unsigned tube_idx = (
tubes_.size() == 1) ? 0
271 : (item->tag() %
tubes_.size());
272 return tubes_[tube_idx]->EnqueueBack(item);
280 unsigned tube_idx = (
tubes_.size() == 1)
283 return tubes_[tube_idx]->EnqueueBack(item);
292 #endif // CVMFS_UTIL_TUBE_H_
Tube< ItemT >::Link * DispatchAny(ItemT *item)
ItemT * Slice(Link *link)
assert((mem||(size==0))&&"Out Of Memory")
pthread_cond_t cond_empty_
atomic_int32 round_robin_
pthread_cond_t cond_populated_
ItemT * SliceUnlocked(Link *link)
Link * EnqueueFront(ItemT *item)
Link * EnqueueBack(ItemT *item)
Tube< ItemT >::Link * Dispatch(ItemT *item)
void TakeTube(Tube< ItemT > *t)
pthread_cond_t cond_capacious_
std::vector< Tube< ItemT > * > tubes_