27 std::unordered_map<Module*,PinChangedEvent::EventStack*> PinChangedEvent::s_event_stack;
30 : m_module(m), m_event(pev), m_id(
id)
35 auto it = s_event_stack.find(m_module);
36 if (it == s_event_stack.end())
44 it->second->push_back(*
this);
54 return (m_id << 4) | (((
u32)m_event)&0xF);
59 if (a.m_event < b.m_event)
return true;
60 if (a.m_event > b.m_event)
return false;
64 void PinChangedEvent::EventStack::send_events(
Module* m)
67 for (
auto it=begin(); it != end(); ++it)
74 auto it = PinChangedEvent::s_event_stack.find(m);
75 if (it == PinChangedEvent::s_event_stack.end())
76 PinChangedEvent::s_event_stack[m] =
new PinChangedEvent::EventStack;
78 ++it->second->m_count;
83 auto it = PinChangedEvent::s_event_stack.find(m_module);
84 assert(it != PinChangedEvent::s_event_stack.end());
85 if (it->second->m_count > 0)
86 --it->second->m_count;
90 PinChangedEvent::s_event_stack.erase(it);
96 auto it = PinChangedEvent::s_event_stack.find(m_module);
97 assert(it != PinChangedEvent::s_event_stack.end());
98 if (it->second->m_count > 0)
100 it->second->send_events(m_module);
NETLIST_API void notify(NetlistEvent::event ev, Netlist *netlist, u32 associated_data=0xFFFFFFFF)
@ pin_changed
associated_data = [4LSB: type of action] [28HSB: id of pin group or pin]
EventHandler * get_event_handler() const
PinChangedEvent(Module *m, PinEvent pev, u32 id)
Module * get_module() const
PinChangedEventScope(Module *m)
@ PinTypeChange
pin renamed
@ GroupReorder
changed PinDirection attribute of group (like input)
@ PinDirChange
changed PinType attribute of pin (like data)
@ PinCreate
moved group to a new position within containing module
@ GroupTypeChange
pin group renamed
@ PinRename
pin assigned to new group
@ PinAssignToGroup
new pin created
@ PinDelete
moved pin to a new position within containing group
@ GroupRename
new pin group created
@ GroupDirChange
changed PinType attribute of group (like data)
@ PinReorder
changed PinDirection attribute of pin (like input)
bool pin_event_order(const PinChangedEvent &a, const PinChangedEvent &b)