Stroika Library 3.0d23
 
Loading...
Searching...
No Matches
VirtualLockable.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2026. All rights reserved
3 */
4
6
7 /*
8 ********************************************************************************
9 ****************************** VirtualLockable *********************************
10 ********************************************************************************
11 */
12 template <Common::StdCompat::Lockable REAL_MUTEX>
14 {
15 struct MyRep_ : IRep_ {
16 MyRep_ ()
17 : fMutex_{}
18 {
19 }
20 virtual void lock () override
21 {
22 fMutex_.lock ();
23 }
24 virtual bool try_lock () override
25 {
26 return fMutex_.try_lock ();
27 }
28 virtual void unlock () override
29 {
30 fMutex_.unlock ();
31 }
32 REAL_MUTEX fMutex_;
33 };
34 return VirtualLockable{make_unique<MyRep_> ()};
35 }
36 inline VirtualLockable::VirtualLockable (unique_ptr<IRep_>&& rep)
37 : fRep_{move (rep)}
38 {
39 RequireNotNull (fRep_);
40 }
41 inline void VirtualLockable::lock ()
42 {
43 fRep_->lock ();
44 }
45 inline bool VirtualLockable::try_lock ()
46 {
47 return fRep_->try_lock ();
48 }
49 inline void VirtualLockable::unlock ()
50 {
51 fRep_->unlock ();
52 }
53
54}
#define RequireNotNull(p)
Definition Assertions.h:348