- public:
- fifo(int limit=0) : max_(limit) {};
- bool enq(T, bool blocking=true);
- void deq(T *);
- bool size() {
+ public:
+ fifo(size_t limit=0) : max_(limit) {}
+
+ bool enq(T e, bool blocking=true) {
+ lock ml(m_);
+ while (max_ && q_.size() >= max_) {
+ if (!blocking)
+ return false;
+ has_space_c_.wait(ml);
+ }
+ q_.push_back(e);
+ non_empty_c_.notify_one();
+ return true;
+ }
+
+ void deq(T * e) {
+ lock ml(m_);
+ while(q_.empty())
+ non_empty_c_.wait(ml);
+ *e = q_.front();
+ q_.pop_front();
+ if (max_ && q_.size() < max_)
+ has_space_c_.notify_one();
+ }
+
+ bool size() {