Beamlib  3.0.1
This is the Beam C++ class library.
BCondInt.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * BCondInt.h BCondInt Class
3  * T.Barnaby, BEAM Ltd, 10/12/02
4  * Copyright (c) 2012 All Right Reserved, Beam Ltd, http://www.beam.ltd.uk
5  *******************************************************************************
6  *
7  * For license see LICENSE.txt at the root of the beamlib source tree.
8  */
9 #ifndef BCONDINT_H
10 #define BCONDINT_H 1
11 
12 #include <BTypes.h>
13 #include <pthread.h>
14 
16 class BCondInt {
17 public:
18  BCondInt();
19  ~BCondInt();
20 
21  void setValue(BInt value);
22  BInt value() const;
23 
24  BInt increment(BInt v = 1);
25  BInt decrement(BInt v = 1);
26 
30 
31  void operator+=(int v);
32  void operator-=(int v);
33  void operator++(int);
34  void operator--(int);
35 
36 private:
37  pthread_mutex_t omutex;
38  pthread_cond_t ocond;
39  BInt ovalue;
40 };
41 
42 inline void BCondInt::operator+=(BInt v){
43  increment(v);
44 }
45 
46 inline void BCondInt::operator-=(BInt v){
47  decrement(v);
48 }
49 
50 inline void BCondInt::operator++(int){
51  increment(1);
52 }
53 
54 inline void BCondInt::operator--(int){
55  decrement(1);
56 }
57 
58 
60 class BCondValue {
61 public:
62  BCondValue();
63  ~BCondValue();
64 
65  void setValue(int value);
66  int value();
67 
68  int increment(int v = 1);
69  int decrement(int v = 1);
70 
71  int waitMoreThanOrEqual(int v, int decrement = 0, int timeOutUs = 0);
72  int waitLessThanOrEqual(int v, int increment = 0, int timeOutUs = 0);
73  int waitLessThan(int v, int timeOutUs = 0);
74 
75  void operator+=(int v);
76  void operator-=(int v);
77  void operator++(int);
78  void operator--(int);
79 private:
80  pthread_mutex_t omutex;
81  pthread_cond_t ocond;
82  int ovalue;
83 };
84 
85 inline void BCondValue::operator+=(int v){
86  increment(v);
87 }
88 
89 inline void BCondValue::operator-=(int v){
90  decrement(v);
91 }
92 
93 inline void BCondValue::operator++(int){
94  increment(1);
95 }
96 
97 inline void BCondValue::operator--(int){
98  decrement(1);
99 }
100 
102 class BCondBool {
103 public:
104  BCondBool();
105  ~BCondBool();
106 
107  int set();
108  int clear();
109  int value();
110  int wait();
111  int timedWait(int timeOutUs);
112 
113  operator int(){ return value(); }
114 private:
115  pthread_mutex_t omutex;
116  pthread_cond_t ocond;
117  int ovalue;
118 };
119 
121 class BCondWrap {
122 public:
123  BCondWrap();
124  ~BCondWrap();
125 
126  void setValue(uint32_t value);
127  uint32_t value();
128 
129  uint32_t increment(uint32_t v = 1);
130  uint32_t decrement(uint32_t v = 1);
131 
132  int waitMoreThanOrEqual(uint32_t v, uint32_t decrement = 0, uint32_t timeOutUs = 0);
133  int waitLessThanOrEqual(uint32_t v, uint32_t increment = 0, uint32_t timeOutUs = 0);
134  int waitLessThan(uint32_t v, uint32_t timeOutUs = 0);
135 
136  void operator+=(int v);
137  void operator-=(int v);
138  void operator++(int);
139  void operator--(int);
140 private:
141  int diff(uint32_t v);
142 
143  pthread_mutex_t omutex;
144  pthread_cond_t ocond;
145  uint32_t ovalue;
146 };
147 
148 inline void BCondWrap::operator+=(int v){
149  increment(v);
150 }
151 
152 inline void BCondWrap::operator-=(int v){
153  decrement(v);
154 }
155 
156 inline void BCondWrap::operator++(int){
157  increment(1);
158 }
159 
160 inline void BCondWrap::operator--(int){
161  decrement(1);
162 }
163 
166 public:
167  BCondResource();
168  ~BCondResource();
169 
170  int lock(uint32_t timeOutUs = 0);
171  int unlock();
172 
173  int start(uint32_t timeOutUs = 0);
174  int end();
175 
176  int locked();
177  int inUse();
178 private:
179  pthread_mutex_t omutex;
180  pthread_cond_t ocond;
181  int olock;
182  int ouse;
183 };
184 
185 #endif
const BTimeout BTimeoutForever
Definition: BTypes.h:46
bool Bool
Definition: BTypes.h:18
BInt32 BInt
Definition: BTypes.h:32
BUInt32 BTimeout
Definition: BTypes.h:45
Thread conditional boolean.
Definition: BCondInt.h:102
~BCondBool()
Definition: BCondInt.cpp:268
BCondBool()
Definition: BCondInt.cpp:262
int timedWait(int timeOutUs)
Wait until set, with timeout.
Definition: BCondInt.cpp:306
int value()
Current value.
Definition: BCondInt.cpp:292
int set()
Set value. Wakes waiting.
Definition: BCondInt.cpp:273
int clear()
Clear Value.
Definition: BCondInt.cpp:283
int wait()
Wait until value is true.
Definition: BCondInt.cpp:296
Thread conditional value.
Definition: BCondInt.h:16
BInt increment(BInt v=1)
Increment. Wakes waiting.
Definition: BCondInt.cpp:48
~BCondInt()
Definition: BCondInt.cpp:32
BInt value() const
Current value.
Definition: BCondInt.cpp:44
BInt decrement(BInt v=1)
Decrement. Wakes waiting.
Definition: BCondInt.cpp:59
void operator-=(int v)
Subtract from value. Wakes waiting.
Definition: BCondInt.h:46
void setValue(BInt value)
Set the value. Wakes waiting.
Definition: BCondInt.cpp:37
Bool waitMoreThanOrEqual(BInt v, Bool decrement=0, BTimeout timeoutUs=BTimeoutForever)
Wait until value is at least the value given.
Definition: BCondInt.cpp:70
void operator++(int)
Increment value. Wakes waiting.
Definition: BCondInt.h:50
void operator--(int)
Decrement value. Wakes waiting.
Definition: BCondInt.h:54
Bool waitLessThanOrEqual(BInt v, Bool increment=0, BTimeout timeoutUs=BTimeoutForever)
Wait until value is equal to or below the value given.
Definition: BCondInt.cpp:94
Bool waitLessThan(BInt v, BTimeout timeoutUs=BTimeoutForever)
Wait until value is equal to or below the value given.
Definition: BCondInt.cpp:117
BCondInt()
Definition: BCondInt.cpp:26
void operator+=(int v)
Add to value. Wakes waiting.
Definition: BCondInt.h:42
Resource lock.
Definition: BCondInt.h:165
int inUse()
Definition: BCondInt.cpp:536
int locked()
Definition: BCondInt.cpp:532
BCondResource()
Definition: BCondInt.cpp:453
int start(uint32_t timeOutUs=0)
Start using the resource.
Definition: BCondInt.cpp:497
int unlock()
Unlock the resource.
Definition: BCondInt.cpp:487
int lock(uint32_t timeOutUs=0)
Lock the resource, will wait for all usage to be 0.
Definition: BCondInt.cpp:465
~BCondResource()
Definition: BCondInt.cpp:460
int end()
Finish using the resource.
Definition: BCondInt.cpp:520
Thread conditional value.
Definition: BCondInt.h:60
BCondValue()
Definition: BCondInt.cpp:140
void operator--(int)
Decrement value. Wakes waiting.
Definition: BCondInt.h:97
int waitLessThan(int v, int timeOutUs=0)
Wait until value is equal to or below the value given.
Definition: BCondInt.cpp:236
int value()
Current value.
Definition: BCondInt.cpp:158
~BCondValue()
Definition: BCondInt.cpp:146
void operator-=(int v)
Subtract from value. Wakes waiting.
Definition: BCondInt.h:89
void operator+=(int v)
Add to value. Wakes waiting.
Definition: BCondInt.h:85
void operator++(int)
Increment value. Wakes waiting.
Definition: BCondInt.h:93
int waitMoreThanOrEqual(int v, int decrement=0, int timeOutUs=0)
Wait until value is at least the value given.
Definition: BCondInt.cpp:184
void setValue(int value)
Set the value. Wakes waiting.
Definition: BCondInt.cpp:151
int waitLessThanOrEqual(int v, int increment=0, int timeOutUs=0)
Wait until value is equal to or below the value given.
Definition: BCondInt.cpp:210
int decrement(int v=1)
Decrement. Wakes waiting.
Definition: BCondInt.cpp:173
int increment(int v=1)
Increment. Wakes waiting.
Definition: BCondInt.cpp:162
Thread conditional unsigned 32 bit integer value that can wrap around.
Definition: BCondInt.h:121
int waitLessThanOrEqual(uint32_t v, uint32_t increment=0, uint32_t timeOutUs=0)
Wait until value is equal to or below the value given.
Definition: BCondInt.cpp:399
int waitMoreThanOrEqual(uint32_t v, uint32_t decrement=0, uint32_t timeOutUs=0)
Wait until value is at least the value given.
Definition: BCondInt.cpp:373
int waitLessThan(uint32_t v, uint32_t timeOutUs=0)
Wait until value is equal to or below the value given.
Definition: BCondInt.cpp:425
void operator--(int)
Decrement value. Wakes waiting.
Definition: BCondInt.h:160
BCondWrap()
Definition: BCondInt.cpp:329
uint32_t increment(uint32_t v=1)
Increment. Wakes waiting.
Definition: BCondInt.cpp:351
void operator++(int)
Increment value. Wakes waiting.
Definition: BCondInt.h:156
~BCondWrap()
Definition: BCondInt.cpp:335
void operator-=(int v)
Subtract from value. Wakes waiting.
Definition: BCondInt.h:152
uint32_t value()
Current value.
Definition: BCondInt.cpp:347
void operator+=(int v)
Add to value. Wakes waiting.
Definition: BCondInt.h:148
uint32_t decrement(uint32_t v=1)
Decrement. Wakes waiting.
Definition: BCondInt.cpp:362
void setValue(uint32_t value)
Set the value. Wakes waiting.
Definition: BCondInt.cpp:340