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;
    }
Exemple #4
0
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;
	}
Exemple #6
0
  void operator()() {
    sequenceBarrier_.waitFor(0L);

    sequence_.set(sequence_.get() + 1L);
  }