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