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