Sauce-0.10.1
A C++ Dependency Injection Framework
locker_factory.h
1#ifndef SAUCE_INTERNAL_LOCKER_FACTORY_H_
2#define SAUCE_INTERNAL_LOCKER_FACTORY_H_
3
4namespace sauce {
5namespace internal {
6
10class Lock {
11public:
12 virtual ~Lock() {}
13};
14
18class NullLock: public Lock {};
19
23template<typename Locker>
24class LockerLock: public Lock {
25 sauce::auto_ptr<Locker> locker;
26
27public:
28
29 LockerLock(sauce::auto_ptr<Locker> locker):
30 locker(locker) {}
31};
32
44public:
45 virtual ~LockFactory() {}
46
47 virtual sauce::auto_ptr<Lock> createLock() = 0;
48};
49
51public:
52 sauce::auto_ptr<Lock> createLock() {
53 sauce::auto_ptr<Lock> lock(new NullLock());
54 return lock;
55 }
56};
57
58template<typename Locker, typename Lockable>
60 Lockable & lockable;
61
62public:
63
64 LockerLockFactory(Lockable & lockable):
65 lockable(lockable) {}
66
67 sauce::auto_ptr<Lock> createLock() {
68 sauce::auto_ptr<Locker> locker(new Locker(lockable));
69 sauce::auto_ptr<Lock> lock(new LockerLock<Locker>(locker));
70 return lock;
71 }
72};
73
74}
75
76namespace i = ::sauce::internal;
77
78}
79
80#endif // SAUCE_INTERNAL_LOCKER_FACTORY_H_
Facility to create opaque RAII guards, intended to be synchronization lockers.
Definition: locker_factory.h:43
An RAII wrapper to hide locker details.
Definition: locker_factory.h:10
Definition: locker_factory.h:59
An adapter to hide the type of the given Locker.
Definition: locker_factory.h:24
Definition: locker_factory.h:50
Not a lock at all, but used when no synchronization is configured.
Definition: locker_factory.h:18