My Project
atomicCounter.h
Go to the documentation of this file.
1 /* atomicCounter.h
2  */
3 #ifndef OSL_ATOMICCOUNTER_H
4 #define OSL_ATOMICCOUNTER_H
5 
6 #include "osl/config.h"
7 #include <atomic>
8 #include <algorithm>
9 
10 namespace osl
11 {
12  namespace misc
13  {
14  template <class Counter>
16  {
17  Counter& counter;
18  explicit IncrementLock(Counter& c) : counter(c)
19  {
20  counter.inc();
21  }
23  {
24  counter.dec();
25  }
26  IncrementLock(const IncrementLock&) = delete;
28  };
30  {
31  std::atomic<int> count;
32  public:
33  explicit AtomicCounter(int count_=0) {
34  this->count=count_;
35  }
36  void inc(){
37  count.fetch_add(1);
38  }
39  void inc(int value){
40  count.fetch_add(value);
41  }
42  int valueAndinc(){
43  return count.fetch_add(1);
44  }
45  void dec(){
46  count.fetch_sub(1);
47  }
48  void max(int val){
49  int x=count;
50  if(x<val){
51  while(! count.compare_exchange_weak(x,val) && x<val)
52  ;
53  }
54  }
55  int value() const{
56  return count;
57  }
58  void setValue(int value) {
59  count = value;
60  }
62  };
63  }
64  using misc::AtomicCounter;
65 }
66 
67 #endif /* OSL_ATOMICCOUNTER_H */
68 // ;;; Local Variables:
69 // ;;; mode:c++
70 // ;;; c-basic-offset:2
71 // ;;; End:
72 
osl::misc::AtomicCounter::inc
void inc()
Definition: atomicCounter.h:36
osl::misc::IncrementLock::counter
Counter & counter
Definition: atomicCounter.h:17
osl::misc::AtomicCounter::setValue
void setValue(int value)
Definition: atomicCounter.h:58
osl::misc::IncrementLock
Definition: atomicCounter.h:16
osl::misc::AtomicCounter::dec
void dec()
Definition: atomicCounter.h:45
osl::misc::IncrementLock::IncrementLock
IncrementLock(const IncrementLock &)=delete
osl::misc::AtomicCounter::max
void max(int val)
Definition: atomicCounter.h:48
osl::misc::AtomicCounter::valueAndinc
int valueAndinc()
Definition: atomicCounter.h:42
osl::misc::AtomicCounter
Definition: atomicCounter.h:30
osl::misc::AtomicCounter::AtomicCounter
AtomicCounter(int count_=0)
Definition: atomicCounter.h:33
osl::misc::AtomicCounter::count
std::atomic< int > count
Definition: atomicCounter.h:31
osl::misc::AtomicCounter::value
int value() const
Definition: atomicCounter.h:55
osl::misc::IncrementLock::IncrementLock
IncrementLock(Counter &c)
Definition: atomicCounter.h:18
osl::misc::AtomicCounter::inc
void inc(int value)
Definition: atomicCounter.h:39
misc
osl::misc::IncrementLock::~IncrementLock
~IncrementLock()
Definition: atomicCounter.h:22
config.h
osl::misc::AtomicCounter::IncLock
IncrementLock< AtomicCounter > IncLock
Definition: atomicCounter.h:61
osl::misc::IncrementLock::operator=
IncrementLock & operator=(const IncrementLock &)=delete
osl
Definition: additionalEffect.h:6