• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //////////////////////////////////////////////////////////////////////////////
2 //
3 // (C) Copyright Vicente J. Botet Escriba 2008-2009,2012. Distributed under the Boost
4 // Software License, Version 1.0. (See accompanying file
5 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // See http://www.boost.org/libs/thread for documentation.
8 //
9 //////////////////////////////////////////////////////////////////////////////
10 
11 #ifndef BOOST_THREAD_NULL_MUTEX_HPP
12 #define BOOST_THREAD_NULL_MUTEX_HPP
13 
14 #include <boost/thread/detail/config.hpp>
15 #include <boost/thread/detail/delete.hpp>
16 #include <boost/chrono/chrono.hpp>
17 
18 /// \file
19 /// Describes null_mutex class
20 
21 namespace boost
22 {
23 
24   /// Implements a mutex that simulates a mutex without doing any operation and
25   /// simulates a successful operation.
26   class null_mutex
27   {
28   public:
29 
30     BOOST_THREAD_NO_COPYABLE( null_mutex) /*< no copyable >*/
31 
null_mutex()32     null_mutex() {}
33 
34     /// Simulates a mutex lock() operation. Empty function.
lock()35     void lock()
36     {
37     }
38 
39     /// Simulates a mutex try_lock() operation.
40     /// Equivalent to "return true;"
try_lock()41     bool try_lock()
42     {
43       return true;
44     }
45 
46     /// Simulates a mutex unlock() operation.
47     /// Empty function.
unlock()48     void unlock()
49     {
50     }
51 
52 #ifdef BOOST_THREAD_USES_CHRONO
53     /// Simulates a mutex try_lock_until() operation.
54     /// Equivalent to "return true;"
55     template <typename Clock, typename Duration>
try_lock_until(chrono::time_point<Clock,Duration> const &)56     bool try_lock_until(chrono::time_point<Clock, Duration> const &)
57     {
58       return true;
59     }
60 
61     /// Simulates a mutex try_lock_for() operation.
62     /// Equivalent to "return true;"
63     template <typename Rep, typename Period>
try_lock_for(chrono::duration<Rep,Period> const &)64     bool try_lock_for(chrono::duration<Rep, Period> const &)
65     {
66       return true;
67     }
68 #endif
69 
70     /// Simulates a mutex lock_shared() operation.
71     /// Empty function.
lock_shared()72     void lock_shared()
73     {
74     }
75 
76     /// Simulates a mutex try_lock_shared() operation.
77     /// Equivalent to "return true;"
try_lock_shared()78     bool try_lock_shared()
79     {
80       return true;
81     }
82 
83     /// Simulates a mutex unlock_shared() operation.
84     /// Empty function.
unlock_shared()85     void unlock_shared()
86     {
87     }
88 
89     /// Simulates a mutex try_lock_shared_until() operation.
90     /// Equivalent to "return true;"
91     template <typename Clock, typename Duration>
try_lock_shared_until(chrono::time_point<Clock,Duration> const &)92     bool try_lock_shared_until(chrono::time_point<Clock, Duration> const &)
93     {
94       return true;
95     }
96     /// Simulates a mutex try_lock_shared_for() operation.
97     /// Equivalent to "return true;"
98     template <typename Rep, typename Period>
try_lock_shared_for(chrono::duration<Rep,Period> const &)99     bool try_lock_shared_for(chrono::duration<Rep, Period> const &)
100     {
101       return true;
102     }
103 
104     /// Simulates a mutex lock_upgrade() operation.
105     /// Empty function.
lock_upgrade()106     void lock_upgrade()
107     {
108     }
109 
110     /// Simulates a mutex try_lock_upgrade() operation.
111     /// Equivalent to "return true;"
try_lock_upgrade()112     bool try_lock_upgrade()
113     {
114       return true;
115     }
116 
117     /// Simulates a mutex unlock_upgrade() operation.
118     /// Empty function.
unlock_upgrade()119     void unlock_upgrade()
120     {
121     }
122 
123     /// Simulates a mutex try_lock_upgrade_until() operation.
124     /// Equivalent to "return true;"
125     template <typename Clock, typename Duration>
try_lock_upgrade_until(chrono::time_point<Clock,Duration> const &)126     bool try_lock_upgrade_until(chrono::time_point<Clock, Duration> const &)
127     {
128       return true;
129     }
130 
131     /// Simulates a mutex try_lock_upgrade_for() operation.
132     /// Equivalent to "return true;"
133     template <typename Rep, typename Period>
try_lock_upgrade_for(chrono::duration<Rep,Period> const &)134     bool try_lock_upgrade_for(chrono::duration<Rep, Period> const &)
135     {
136       return true;
137     }
138 
139     /// Simulates a mutex try_unlock_shared_and_lock() operation.
140     /// Equivalent to "return true;"
try_unlock_shared_and_lock()141     bool try_unlock_shared_and_lock()
142     {
143       return true;
144     }
145 
146 #ifdef BOOST_THREAD_USES_CHRONO
147     /// Simulates a mutex try_unlock_shared_and_lock_until() operation.
148     /// Equivalent to "return true;"
149     template <typename Clock, typename Duration>
try_unlock_shared_and_lock_until(chrono::time_point<Clock,Duration> const &)150     bool try_unlock_shared_and_lock_until(chrono::time_point<Clock, Duration> const &)
151     {
152       return true;
153     }
154 
155     /// Simulates a mutex try_unlock_shared_and_lock_for() operation.
156     /// Equivalent to "return true;"
157     template <typename Rep, typename Period>
try_unlock_shared_and_lock_for(chrono::duration<Rep,Period> const &)158     bool try_unlock_shared_and_lock_for(chrono::duration<Rep, Period> const &)
159     {
160       return true;
161     }
162 #endif
163 
164     /// Simulates unlock_and_lock_shared().
165     /// Empty function.
unlock_and_lock_shared()166     void unlock_and_lock_shared()
167     {
168     }
169 
170     /// Simulates a mutex try_unlock_shared_and_lock_upgrade() operation.
171     /// Equivalent to "return true;"
try_unlock_shared_and_lock_upgrade()172     bool try_unlock_shared_and_lock_upgrade()
173     {
174       return true;
175     }
176 
177 #ifdef BOOST_THREAD_USES_CHRONO
178     /// Simulates a mutex try_unlock_shared_and_lock_upgrade_until() operation.
179     /// Equivalent to "return true;"
180     template <typename Clock, typename Duration>
try_unlock_shared_and_lock_upgrade_until(chrono::time_point<Clock,Duration> const &)181     bool try_unlock_shared_and_lock_upgrade_until(chrono::time_point<Clock, Duration> const &)
182     {
183       return true;
184     }
185 
186     /// Simulates a mutex try_unlock_shared_and_lock_upgrade_for() operation.
187     /// Equivalent to "return true;"
188     template <typename Rep, typename Period>
try_unlock_shared_and_lock_upgrade_for(chrono::duration<Rep,Period> const &)189     bool try_unlock_shared_and_lock_upgrade_for(chrono::duration<Rep, Period> const &)
190     {
191       return true;
192     }
193 #endif
194 
195     /// Simulates unlock_and_lock_upgrade().
196     /// Empty function.
unlock_and_lock_upgrade()197     void unlock_and_lock_upgrade()
198     {
199     }
200 
201     /// Simulates unlock_upgrade_and_lock().
202     /// Empty function.
unlock_upgrade_and_lock()203     void unlock_upgrade_and_lock()
204     {
205     }
206 
207     /// Simulates a mutex try_unlock_upgrade_and_lock() operation.
208     /// Equivalent to "return true;"
try_unlock_upgrade_and_lock()209     bool try_unlock_upgrade_and_lock()
210     {
211       return true;
212     }
213 
214 #ifdef BOOST_THREAD_USES_CHRONO
215     /// Simulates a mutex try_unlock_upgrade_and_lock_until() operation.
216     /// Equivalent to "return true;"
217     template <typename Clock, typename Duration>
try_unlock_upgrade_and_lock_until(chrono::time_point<Clock,Duration> const &)218     bool try_unlock_upgrade_and_lock_until(chrono::time_point<Clock, Duration> const &)
219     {
220       return true;
221     }
222 
223     /// Simulates a mutex try_unlock_upgrade_and_lock_for() operation.
224     /// Equivalent to "return true;"
225     template <typename Rep, typename Period>
try_unlock_upgrade_and_lock_for(chrono::duration<Rep,Period> const &)226     bool try_unlock_upgrade_and_lock_for(chrono::duration<Rep, Period> const &)
227     {
228       return true;
229     }
230 #endif
231 
232     /// Simulates unlock_upgrade_and_lock_shared().
233     /// Empty function.
unlock_upgrade_and_lock_shared()234     void unlock_upgrade_and_lock_shared()
235     {
236     }
237 
238   };
239 
240 } //namespace boost {
241 
242 
243 #endif
244