My Project
std
osl
misc
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>
15
struct
IncrementLock
16
{
17
Counter&
counter
;
18
explicit
IncrementLock
(Counter& c) :
counter
(c)
19
{
20
counter
.inc();
21
}
22
~IncrementLock
()
23
{
24
counter
.dec();
25
}
26
IncrementLock
(
const
IncrementLock
&) =
delete
;
27
IncrementLock
&
operator=
(
const
IncrementLock
&) =
delete
;
28
};
29
class
AtomicCounter
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
}
61
typedef
IncrementLock<AtomicCounter>
IncLock
;
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
Definition
atomicCounter.h:30
osl::misc::AtomicCounter::inc
void inc()
Definition
atomicCounter.h:36
osl::misc::AtomicCounter::count
std::atomic< int > count
Definition
atomicCounter.h:31
osl::misc::AtomicCounter::valueAndinc
int valueAndinc()
Definition
atomicCounter.h:42
osl::misc::AtomicCounter::dec
void dec()
Definition
atomicCounter.h:45
osl::misc::AtomicCounter::inc
void inc(int value)
Definition
atomicCounter.h:39
osl::misc::AtomicCounter::setValue
void setValue(int value)
Definition
atomicCounter.h:58
osl::misc::AtomicCounter::IncLock
IncrementLock< AtomicCounter > IncLock
Definition
atomicCounter.h:61
osl::misc::AtomicCounter::max
void max(int val)
Definition
atomicCounter.h:48
osl::misc::AtomicCounter::value
int value() const
Definition
atomicCounter.h:55
osl::misc::AtomicCounter::AtomicCounter
AtomicCounter(int count_=0)
Definition
atomicCounter.h:33
config.h
osl
Definition
additionalEffect.h:6
osl::misc::IncrementLock
Definition
atomicCounter.h:16
osl::misc::IncrementLock::counter
Counter & counter
Definition
atomicCounter.h:17
osl::misc::IncrementLock::IncrementLock
IncrementLock(const IncrementLock &)=delete
osl::misc::IncrementLock::operator=
IncrementLock & operator=(const IncrementLock &)=delete
osl::misc::IncrementLock::~IncrementLock
~IncrementLock()
Definition
atomicCounter.h:22
osl::misc::IncrementLock::IncrementLock
IncrementLock(Counter &c)
Definition
atomicCounter.h:18
Generated by
1.9.8