const_iterator Wait(const K &key, OperationEnvironment &env, TimeoutClock timeout) { while (true) { auto i = map.find(key); if (i != map.end() && !i->second.old) return const_iterator(i); if (env.IsCancelled()) return end(); int remaining = timeout.GetRemainingSigned(); if (remaining <= 0) return end(); cond.timed_wait(*this, remaining); } }
const_iterator Wait(std::unique_lock<Mutex> &lock, const K &key, OperationEnvironment &env, TimeoutClock timeout) { while (true) { auto i = map.find(key); if (i != map.end() && !i->second.old) return const_iterator(i); if (env.IsCancelled()) return end(); const auto remaining = timeout.GetRemainingSigned(); if (remaining.count() <= 0) return end(); cond.wait_for(lock, remaining); } }