summaryrefslogtreecommitdiff
path: root/src/itoatom.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/itoatom.h')
-rw-r--r--src/itoatom.h81
1 files changed, 41 insertions, 40 deletions
diff --git a/src/itoatom.h b/src/itoatom.h
index 2791519..5d4db0e 100644
--- a/src/itoatom.h
+++ b/src/itoatom.h
@@ -5,59 +5,60 @@
5 * terms of the license contained in the file LICENSE. 5 * terms of the license contained in the file LICENSE.
6 */ 6 */
7 7
8#ifndef BU_ITO_QUEUE_H 8#ifndef BU_ITO_ATOM_H
9#define BU_ITO_QUEUE_H 9#define BU_ITO_ATOM_H
10 10
11#include <pthread.h> 11#include <pthread.h>
12 12
13#include "itomutex.h" 13#include "itomutex.h"
14#include "itocondition.h" 14#include "itocondition.h"
15 15
16/** 16namespace Bu
17 * A thread-safe wrapper class.
18 *@ingroup Threading
19 */
20template <class T>
21class ItoAtom
22{ 17{
23public:
24 /** 18 /**
25 * Construct an empty queue. 19 * A thread-safe wrapper class.
20 *@ingroup Threading
26 */ 21 */
27 ItoAtom() 22 template <class T>
23 class ItoAtom
28 { 24 {
29 } 25 public:
26 /**
27 * Construct an empty queue.
28 */
29 ItoAtom()
30 {
31 }
30 32
31 ItoAtom( const T &src ) : 33 ItoAtom( const T &src ) :
32 data( src ) 34 data( src )
33 { 35 {
34 } 36 }
35 37
36 ~ItoQueue() 38 ~ItoAtom()
37 { 39 {
38 } 40 }
39 41
40 T get() 42 T get()
41 { 43 {
42 mOperate.lock(); 44 mOperate.lock();
43 mOperate.unlock(); 45 T ret = data;
44 return data; 46 mOperate.unlock();
45 } 47 return ret;
48 }
46 49
47 void set( const T &val ) 50 void set( const T &val )
48 { 51 {
49 mOperate.lock(); 52 mOperate.lock();
50 data = val; 53 data = val;
51 cBlock.signal(); 54 mOperate.unlock();
52 mOperate.unlock(); 55 }
53 } 56
54 57 private:
55private: 58 T data;
56 Item *pStart; /**< The start of the queue, the next element to dequeue. */ 59
57 Item *pEnd; /**< The end of the queue, the last element to dequeue. */ 60 ItoMutex mOperate; /**< The master mutex, used on all operations. */
58 61 };
59 ItoMutex mOperate; /**< The master mutex, used on all operations. */
60 ItoCondition cBlock; /**< The condition for blocking dequeues. */
61}; 62};
62 63
63#endif 64#endif