1 // Copyright (C) 2003  Davis E. King (davis@dlib.net)
2 // License: Boost Software License   See LICENSE.txt for the full license.
3 #ifndef DLIB_SYNC_EXTENSION_KERNEl_1_
4 #define DLIB_SYNC_EXTENSION_KERNEl_1_
5 
6 #include "../threads.h"
7 #include "../algs.h"
8 #include "sync_extension_kernel_abstract.h"
9 
10 namespace dlib
11 {
12 
13     template <
14         typename base
15         >
16     class sync_extension_kernel_1 : public base
17     {
18 
19         rmutex m;
20         rsignaler s;
21 
22         public:
23 
sync_extension_kernel_1()24         sync_extension_kernel_1 () : s(m) {}
25 
26         template < typename T >
sync_extension_kernel_1(const T & one)27         sync_extension_kernel_1 (const T& one) : base(one),s(m) {}
28         template < typename T, typename U >
sync_extension_kernel_1(const T & one,const U & two)29         sync_extension_kernel_1 (const T& one, const U& two) : base(one,two),s(m) {}
30 
31 
get_mutex()32         const rmutex& get_mutex(
33         ) const { return m; }
34 
lock()35         void lock (
36         ) const { m.lock(); }
37 
unlock()38         void unlock (
39         ) const { m.unlock(); }
40 
wait()41         void wait (
42         ) const { s.wait(); }
43 
wait_or_timeout(unsigned long milliseconds)44         bool wait_or_timeout (
45             unsigned long milliseconds
46         ) const { return s.wait_or_timeout(milliseconds); }
47 
broadcast()48         void broadcast (
49         ) const { s.broadcast(); }
50 
signal()51         void signal (
52         ) const { s.signal(); }
53 
54     };
55 
56     template <
57         typename base
58         >
swap(sync_extension_kernel_1<base> & a,sync_extension_kernel_1<base> & b)59     inline void swap (
60         sync_extension_kernel_1<base>& a,
61         sync_extension_kernel_1<base>& b
62     ) { a.swap(b); }
63 
64 }
65 
66 #endif // DLIB_SYNC_EXTENSION_KERNEl_1_
67 
68