/
task_trigger.h
56 lines (49 loc) · 1.25 KB
/
task_trigger.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*
* Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
*/
#ifndef __ctrlplane__task_trigger__
#define __ctrlplane__task_trigger__
#include <boost/function.hpp>
#include <tbb/atomic.h>
class TaskTrigger {
public:
typedef boost::function<bool(void)> FunctionPtr;
TaskTrigger(FunctionPtr func, int task_id, int task_instance);
~TaskTrigger();
void Set();
void Reset();
// For Test only
void set_disable() {
bool current = disabled_.fetch_and_store(true);
assert(!current);
}
void set_enable() {
bool current = disabled_.fetch_and_store(false);
assert(current);
Set();
}
bool disabled() {
return disabled_;
}
// For Test only
void set_deferred() {
bool current = deferred_.fetch_and_store(true);
assert(!current);
}
void clear_deferred() {
bool current = deferred_.fetch_and_store(false);
assert(current);
}
bool deferred() {
return deferred_;
}
private:
class WorkerTask;
FunctionPtr func_;
int task_id_;
int task_instance_;
tbb::atomic<bool> trigger_;
tbb::atomic<bool> disabled_;
tbb::atomic<bool> deferred_;
};
#endif /* defined(__ctrlplane__task_trigger__) */