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