HAL
event_handler.cpp
Go to the documentation of this file.
2 
8 
9 namespace hal
10 {
11  template<>
12  std::map<NetlistEvent::event, std::string> EnumStrings<NetlistEvent::event>::data = {{NetlistEvent::event::id_changed, "id_changed"},
13  {NetlistEvent::event::input_filename_changed, "input_filename_changed"},
14  {NetlistEvent::event::design_name_changed, "design_name_changed"},
15  {NetlistEvent::event::device_name_changed, "device_name_changed"},
16  {NetlistEvent::event::marked_global_vcc, "marked_global_vcc"},
17  {NetlistEvent::event::marked_global_gnd, "marked_global_gnd"},
18  {NetlistEvent::event::unmarked_global_vcc, "unmarked_global_vcc"},
19  {NetlistEvent::event::unmarked_global_gnd, "unmarked_global_gnd"},
20  {NetlistEvent::event::marked_global_input, "marked_global_input"},
21  {NetlistEvent::event::marked_global_output, "marked_global_output"},
22  {NetlistEvent::event::unmarked_global_input, "unmarked_global_input"},
23  {NetlistEvent::event::unmarked_global_output, "unmarked_global_output"}};
24 
25  template<>
26  std::map<GateEvent::event, std::string> EnumStrings<GateEvent::event>::data = {{GateEvent::event::created, "created"},
27  {GateEvent::event::removed, "removed"},
28  {GateEvent::event::name_changed, "name_changed"},
29  {GateEvent::event::location_changed, "location_changed"},
30  {GateEvent::event::boolean_function_changed, "boolean_function_changed"}};
31 
32  template<>
33  std::map<NetEvent::event, std::string> EnumStrings<NetEvent::event>::data = {{NetEvent::event::created, "created"},
34  {NetEvent::event::removed, "removed"},
35  {NetEvent::event::name_changed, "name_changed"},
36  {NetEvent::event::src_added, "src_added"},
37  {NetEvent::event::src_removed, "src_removed"},
38  {NetEvent::event::dst_added, "dst_added"},
39  {NetEvent::event::dst_removed, "dst_removed"}};
40 
41  template<>
42  std::map<ModuleEvent::event, std::string> EnumStrings<ModuleEvent::event>::data = {{ModuleEvent::event::created, "created"},
43  {ModuleEvent::event::removed, "removed"},
44  {ModuleEvent::event::name_changed, "name_changed"},
45  {ModuleEvent::event::type_changed, "type_changed"},
46  {ModuleEvent::event::parent_changed, "parent_changed"},
47  {ModuleEvent::event::submodule_added, "submodule_added"},
48  {ModuleEvent::event::submodule_removed, "submodule_removed"},
49  {ModuleEvent::event::gates_assign_begin, "gates_assign_begin"},
50  {ModuleEvent::event::gates_assign_end, "gates_assign_end"},
51  {ModuleEvent::event::gate_assigned, "gate_assigned"},
52  {ModuleEvent::event::gates_remove_begin, "gates_remove_begin"},
53  {ModuleEvent::event::gates_remove_end, "gates_remove_end"},
54  {ModuleEvent::event::gate_removed, "gate_removed"},
55  {ModuleEvent::event::pin_changed, "pin_changed"}};
56 
57  template<>
58  std::map<GroupingEvent::event, std::string> EnumStrings<GroupingEvent::event>::data = {{GroupingEvent::event::created, "created"},
59  {GroupingEvent::event::removed, "removed"},
60  {GroupingEvent::event::name_changed, "name_changed"},
61  {GroupingEvent::event::gate_assigned, "gate_assigned"},
62  {GroupingEvent::event::gate_removed, "gate_removed"},
63  {GroupingEvent::event::net_assigned, "net_assigned"},
64  {GroupingEvent::event::net_removed, "net_removed"},
65  {GroupingEvent::event::module_assigned, "module_assigned"},
66  {GroupingEvent::event::module_removed, "module_removed"}};
67 
68  EventHandler::EventHandler() : netlist_event_enabled(true), module_event_enabled(true), gate_event_enabled(true), net_event_enabled(true), grouping_event_enabled(true)
69  {
70  }
71 
73  {
74  netlist_event_enabled = flag;
75  module_event_enabled = flag;
76  gate_event_enabled = flag;
77  net_event_enabled = flag;
78  grouping_event_enabled = flag;
79  }
80 
82  {
83  if (netlist_event_enabled)
84  {
85  m_netlist_callback(c, netlist, associated_data);
86  event_log::handle_netlist_event(c, netlist, associated_data);
87  }
88  }
89 
90  void EventHandler::notify(GateEvent::event c, Gate* gate, u32 associated_data)
91  {
92  if (gate_event_enabled)
93  {
94  m_gate_callback(c, gate, associated_data);
95  event_log::handle_gate_event(c, gate, associated_data);
96  }
97  }
98 
99  void EventHandler::notify(NetEvent::event c, Net* net, u32 associated_data)
100  {
101  if (net_event_enabled)
102  {
103  m_net_callback(c, net, associated_data);
104  event_log::handle_net_event(c, net, associated_data);
105  }
106  }
107 
109  {
110  // ModuleEvent::dump(c, true);
111  if (module_event_enabled)
112  {
113  m_module_callback(c, module, associated_data);
114  event_log::handle_module_event(c, module, associated_data);
115  }
116  }
117 
118  void EventHandler::notify(GroupingEvent::event c, Grouping* grouping, u32 associated_data)
119  {
120  if (grouping_event_enabled)
121  {
122  m_grouping_callback(c, grouping, associated_data);
123  event_log::handle_grouping_event(c, grouping, associated_data);
124  }
125  }
126 
127  void EventHandler::register_callback(const std::string& name, std::function<void(GateEvent::event, Gate*, u32)> function)
128  {
129  m_gate_callback.add_callback(name, function);
130  }
131 
132  void EventHandler::register_callback(const std::string& name, std::function<void(GroupingEvent::event, Grouping*, u32)> function)
133  {
134  m_grouping_callback.add_callback(name, function);
135  }
136 
137  void EventHandler::register_callback(const std::string& name, std::function<void(ModuleEvent::event, Module*, u32)> function)
138  {
139  m_module_callback.add_callback(name, function);
140  }
141 
142  void EventHandler::register_callback(const std::string& name, std::function<void(NetEvent::event, Net*, u32)> function)
143  {
144  m_net_callback.add_callback(name, function);
145  }
146 
147  void EventHandler::register_callback(const std::string& name, std::function<void(NetlistEvent::event, Netlist*, u32)> function)
148  {
149  m_netlist_callback.add_callback(name, function);
150  }
151 
152  void EventHandler::unregister_callback(const std::string& name)
153  {
154  m_netlist_callback.remove_callback(name);
155  m_module_callback.remove_callback(name);
156  m_gate_callback.remove_callback(name);
157  m_net_callback.remove_callback(name);
158  m_grouping_callback.remove_callback(name);
159  }
160 } // namespace hal
NETLIST_API void unregister_callback(const std::string &name)
NETLIST_API void notify(NetlistEvent::event ev, Netlist *netlist, u32 associated_data=0xFFFFFFFF)
NETLIST_API void register_callback(const std::string &name, std::function< void(NetlistEvent::event e, Netlist *netlist, u32 associated_data)> function)
NETLIST_API void event_enable_all(bool flag)
@ boolean_function_changed
no associated_data
@ location_changed
no associated_data
@ removed
no associated_data
@ name_changed
no associated_data
@ created
no associated_data
Definition: gate.h:58
@ net_assigned
associated_data = id of inserted net
@ module_removed
associated_data = id of removed module
@ gate_assigned
associated_data = id of inserted gate
@ module_assigned
associated_data = id of inserted module
@ gate_removed
associated_data = id of removed gate
@ removed
no associated_data
@ net_removed
associated_data = id of removed net
@ name_changed
no associated_data
@ created
no associated_data
@ gates_remove_end
associated_data = number of removed gates
@ gate_assigned
associated_data = id of inserted gate
@ gate_removed
associated_data = id of removed gate
@ pin_changed
associated_data = [4LSB: type of action] [28HSB: id of pin group or pin]
@ submodule_removed
associated_data = id of removed module
@ gates_assign_begin
associated_data = number of gates to assign
@ type_changed
no associated_data
@ gates_assign_end
associated_data = number of assigned gates
@ gates_remove_begin
associated_data = number of gates to remove
@ submodule_added
associated_data = id of added module
@ removed
no associated_data
@ parent_changed
no associated_data
@ name_changed
no associated_data
@ created
no associated_data
@ src_added
associated_data = id of src gate
@ dst_removed
associated_data = id of dst gate
@ src_removed
associated_data = id of src gate
@ dst_added
associated_data = id of dst gate
@ removed
no associated_data
@ name_changed
no associated_data
@ created
no associated_data
Definition: net.h:58
@ marked_global_gnd
associated_data = id of gate
@ unmarked_global_output
associated_data = id of net
@ id_changed
associated_data = old id
@ device_name_changed
no associated_data
@ unmarked_global_gnd
associated_data = id of gate
@ input_filename_changed
no associated_data
@ unmarked_global_vcc
associated_data = id of gate
@ marked_global_vcc
associated_data = id of gate
@ unmarked_global_input
associated_data = id of net
@ design_name_changed
no associated_data
@ marked_global_output
associated_data = id of net
@ marked_global_input
associated_data = id of net
const Module * module(const Gate *g, const NodeBoxes &boxes)
void handle_net_event(NetEvent::event event, Net *net, u32 associated_data)
Definition: event_log.cpp:49
void handle_gate_event(GateEvent::event event, Gate *gate, u32 associated_data)
Definition: event_log.cpp:25
void handle_netlist_event(NetlistEvent::event event, Netlist *netlist, u32 associated_data)
Definition: event_log.cpp:92
void handle_grouping_event(GroupingEvent::event event, Grouping *grp, u32 associated_data)
Definition: event_log.cpp:159
void handle_module_event(ModuleEvent::event event, Module *module, u32 associated_data)
Definition: event_log.cpp:216
quint32 u32
Net * net
std::string name