acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
counter.h
1#pragma once
2
3
4#include "acme/platform/procedure.h"
5
6
7namespace parallelization
8{
9
10
11 class counter :
12 virtual public ::particle
13 {
14 protected:
15
16
17 ::procedure m_procedureCompleted;
18
19
20 public:
21
22
23 interlocked_count m_interlocked;
24
25
26 counter(::collection::count c, const ::procedure & procedureCompleted) :
27 m_interlocked(c),
28 m_procedureCompleted(procedureCompleted)
29 {
30
31
32 }
33
34
35 ::collection::count operator ++()
36 {
37
38 ::collection::count c = --m_interlocked;
39
40 if (has_completed())
41 {
42
43 m_procedureCompleted();
44
45 }
46
47 return c;
48
49 }
50
51
52 ::collection::count operator ++(::i32)
53 {
54
55 ::collection::count c = m_interlocked;
56
57 ++(*this);
58
59 return c;
60
61 }
62
63
64 bool has_completed() const
65 {
66
67 return m_interlocked <= 0;
68
69 }
70
71
72 };
73
74
75} // namespace parallelization
76
77
78
79//class counter32 :
80// public manual_reset_happening
81//{
82//public:
83//
84//
85// interlocked_int m_interlocked;
86//
87//
88// counter32(::i32 lCount) : m_interlocked(lCount) {}
89//
90//
91// ::i32 operator ++()
92// {
93//
94// ::i32 i = --m_interlocked;
95//
96// if (i <= 0)
97// {
98//
99// set_happening();
100//
101// }
102//
103// return i;
104//
105// }
106//
107//
108// ::i32 operator ++(::i32)
109// {
110//
111// ::i32 i = m_interlocked;
112//
113// ++(*this);
114//
115// return i;
116//
117// }
118//
119//};
120//
121//
122//