HAL  v4.5.0-254-g8f9f6a423
The Hardware Analyzer - a comprehensive reverse engineering and manipulation framework for gate-level netlists.
state_table_component.cpp
Go to the documentation of this file.
2 
4 
5 namespace hal
6 {
7  StateTableComponent::StateTableComponent(std::unique_ptr<GateTypeComponent> component, std::vector<StateTable> tables)
8  : m_component(std::move(component)), m_tables(std::move(tables))
9  {
10  }
11 
12  std::unique_ptr<StateTableComponent> StateTableComponent::create(std::unique_ptr<GateTypeComponent> component, std::vector<StateTable> tables)
13  {
14  return std::unique_ptr<StateTableComponent>(new StateTableComponent(std::move(component), std::move(tables)));
15  }
16 
17  StateTableComponent::ComponentType StateTableComponent::get_type() const
18  {
19  return m_type;
20  }
21 
22  bool StateTableComponent::is_class_of(const GateTypeComponent* component)
23  {
24  return component->get_type() == m_type;
25  }
26 
27  std::vector<GateTypeComponent*> StateTableComponent::get_components(const std::function<bool(const GateTypeComponent*)>& filter) const
28  {
29  if (m_component != nullptr)
30  {
31  std::vector<GateTypeComponent*> res = m_component->get_components(filter);
32  if (filter)
33  {
34  if (filter(m_component.get()))
35  {
36  res.push_back(m_component.get());
37  }
38  }
39  else
40  {
41  res.push_back(m_component.get());
42  }
43  return res;
44  }
45  return {};
46  }
47 
48  const std::vector<StateTableComponent::StateTable>& StateTableComponent::get_state_tables() const
49  {
50  return m_tables;
51  }
52 
53  Result<const StateTableComponent::StateTable*> StateTableComponent::get_state_table_for_pin(const std::string& pin_name) const
54  {
55  for (const StateTable& t : m_tables)
56  {
57  if (t.pin_name == pin_name)
58  {
59  return OK(&t);
60  }
61  }
62  return ERR("no state table found for pin '" + pin_name + "'");
63  }
64 
65  Result<const StateTableComponent::StateTable*> StateTableComponent::get_state_table_for_pin(const GatePin* pin) const
66  {
67  if (pin == nullptr)
68  {
69  return ERR("pin is nullptr");
70  }
71  return get_state_table_for_pin(pin->get_name());
72  }
73 } // namespace hal
const std::string & get_name() const
Definition: base_pin.h:110
virtual ComponentType get_type() const =0
#define ERR(message)
Definition: result.h:60
#define OK(...)
Definition: result.h:56
Definition: defines.h:45