1/*
2 *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_SYSTEM_WRAPPERS_INCLUDE_CONDITION_VARIABLE_WRAPPER_H_
12#define WEBRTC_SYSTEM_WRAPPERS_INCLUDE_CONDITION_VARIABLE_WRAPPER_H_
13
14namespace webrtc {
15
16class CriticalSectionWrapper;
17
18class ConditionVariableWrapper {
19 public:
20  // Factory method, constructor disabled.
21  static ConditionVariableWrapper* CreateConditionVariable();
22
23  virtual ~ConditionVariableWrapper() {}
24
25  // Calling thread will atomically release crit_sect and wait until next
26  // some other thread calls Wake() or WakeAll().
27  virtual void SleepCS(CriticalSectionWrapper& crit_sect) = 0;
28
29  // Same as above but with a timeout.
30  virtual bool SleepCS(CriticalSectionWrapper& crit_sect,
31                       unsigned long max_time_in_ms) = 0;
32
33  // Wakes one thread calling SleepCS().
34  virtual void Wake() = 0;
35
36  // Wakes all threads calling SleepCS().
37  virtual void WakeAll() = 0;
38};
39
40}  // namespace webrtc
41
42#endif  // WEBRTC_SYSTEM_WRAPPERS_INCLUDE_CONDITION_VARIABLE_WRAPPER_H_
43