- add third_party src.
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / system_wrappers / interface / rw_lock_wrapper.h
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_INTERFACE_RW_LOCK_WRAPPER_H_
12 #define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_RW_LOCK_WRAPPER_H_
13
14 // Note, Windows pre-Vista version of RW locks are not supported natively. For
15 // these OSs regular critical sections have been used to approximate RW lock
16 // functionality and will therefore have worse performance.
17
18 namespace webrtc {
19
20 class RWLockWrapper {
21  public:
22   static RWLockWrapper* CreateRWLock();
23   virtual ~RWLockWrapper() {}
24
25   virtual void AcquireLockExclusive() = 0;
26   virtual void ReleaseLockExclusive() = 0;
27
28   virtual void AcquireLockShared() = 0;
29   virtual void ReleaseLockShared() = 0;
30 };
31
32 // RAII extensions of the RW lock. Prevents Acquire/Release missmatches and
33 // provides more compact locking syntax.
34 class ReadLockScoped {
35  public:
36   ReadLockScoped(RWLockWrapper& rw_lock)
37     :
38     rw_lock_(rw_lock) {
39     rw_lock_.AcquireLockShared();
40   }
41
42   ~ReadLockScoped() {
43     rw_lock_.ReleaseLockShared();
44   }
45
46  private:
47   RWLockWrapper& rw_lock_;
48 };
49
50 class WriteLockScoped {
51  public:
52   WriteLockScoped(RWLockWrapper& rw_lock)
53     :
54     rw_lock_(rw_lock) {
55     rw_lock_.AcquireLockExclusive();
56   }
57
58   ~WriteLockScoped() {
59     rw_lock_.ReleaseLockExclusive();
60   }
61
62  private:
63   RWLockWrapper& rw_lock_;
64 };
65
66 }  // namespace webrtc
67
68 #endif  // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_RW_LOCK_WRAPPER_H_