long waitFor(long sequence, const Sequence& cursor, const SequenceGroup& dependent, const AlertableBarrier& barrier) { long availableSequence; if ((availableSequence = cursor.get()) < sequence) { std::unique_lock<std::mutex> ulock(m_mutex); while ((availableSequence = cursor.get()) < sequence) { barrier.checkAlert(); std::cv_status status = m_condition.wait_for(ulock, std::chrono::microseconds(m_timeout_micros)); if (status == std::cv_status::timeout) { break; } } } if (!dependent.isEmpty()) { while ((availableSequence = dependent.get()) < sequence) { barrier.checkAlert(); } } return availableSequence; }
void test() { Sequence s; assert(s.insert(0, 10)); assert(s.insert(0, 20)); assert(s.size() == 2); ItemType x = 999; assert(s.get(0, x) && x == 20); assert(s.get(1, x) && x == 10); }
virtual bool operator==(const Sequence<T>& seq) const { index_t len = size(); if (len != seq.size()) return false; for (index_t i = 0; i < len; ++i) if ( ! (this->get(i) == seq.get(i)) ) return false; return true; }
Sequence* getSummationSeq(Sequence * seq) { Sequence * res = new Sequence(seq->getLength()); res->set(1, seq->get(1)); for(int i = 2; i <= res->getLength(); i++) { res->set(i, res->get(i-1) + seq->get(i)); } return res; }
long waitFor(const long& sequence, const Sequence& cursor, const SequenceGroup& dependents, const AlertableBarrier& barrier) { long available_sequence = 0; if (dependents.isEmpty()) { while ((available_sequence = cursor.get()) < sequence) { barrier.checkAlert(); } } else { while ((available_sequence = dependents.get()) < sequence) { barrier.checkAlert(); } } return available_sequence; }
void operator()() { sequenceBarrier_.waitFor(0L); sequence_.set(sequence_.get() + 1L); }