27 std::unordered_map<Module*,PinChangedEvent::EventStack*> PinChangedEvent::s_event_stack;
28 u64 PinChangedEvent::s_order = 0;
31 : m_module(m), m_event(pev), m_id(
id), m_order(++s_order)
36 auto it = s_event_stack.find(m_module);
37 if (it == s_event_stack.end())
45 it->second->push_back(*
this);
55 return (m_id << 4) | (((
u32)m_event)&0xF);
60 if (a.m_event < b.m_event)
return true;
61 if (a.m_event > b.m_event)
return false;
63 return a.m_order > b.m_order;
67 void PinChangedEvent::EventStack::send_events(
Module* m)
70 for (
auto it=begin(); it != end(); ++it)
77 auto it = PinChangedEvent::s_event_stack.find(m);
78 if (it == PinChangedEvent::s_event_stack.end())
79 PinChangedEvent::s_event_stack[m] =
new PinChangedEvent::EventStack;
81 ++it->second->m_count;
86 auto it = PinChangedEvent::s_event_stack.find(m_module);
87 assert(it != PinChangedEvent::s_event_stack.end());
88 if (it->second->m_count > 0)
89 --it->second->m_count;
93 PinChangedEvent::s_event_stack.erase(it);
99 auto it = PinChangedEvent::s_event_stack.find(m_module);
100 assert(it != PinChangedEvent::s_event_stack.end());
101 if (it->second->m_count > 0)
103 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)