inline bool operator== ( const google::protobuf::RepeatedField<T> & x, const google::protobuf::RepeatedField<T> & y) { if (LOOM_UNLIKELY(x.size() != y.size())) { return false; } for (size_t i = 0, size = x.size(); i < size; ++i) { if (LOOM_UNLIKELY(x.Get(i) != y.Get(i))) { return false; } } return true; }
Value & find_or_insert (Id id) { size_t pos = lower_bound(id); if (LOOM_UNLIKELY(pos == size() or index(pos) != id)) { index_.insert(index_.begin() + pos, id); values_.insert(values_.begin() + pos, Value()); } return values_[pos]; }
bool test () { if (LOOM_UNLIKELY(not stale_count_) and LOOM_LIKELY(fresh_count_)) { stale_count_ = fresh_count_; fresh_count_ = 0; return true; } else { return false; } }
void unsafe_add_thread ( size_t stage_number, const ThreadState & init_thread, const Fun & fun) { queue_.unsafe_add_consumer(stage_number); size_t init_position = queue_.unsafe_position(); threads_.push_back(std::thread( [this, stage_number, init_thread, init_position, fun](){ ThreadState thread = init_thread; size_t position = init_position; for (bool alive = true; LOOM_LIKELY(alive);) { queue_.consume(stage_number, position, [&](PipelineTask & task){ if (LOOM_UNLIKELY(task.exit)) { alive = false; } else { fun(task.task, thread); } }); ++position; } })); }