39 #include <unordered_map>
50 class NetlistInternalManager;
67 bool operator==(
const Gate& other)
const;
76 bool operator!=(
const Gate& other)
const;
83 ssize_t get_hash()
const;
104 const std::string& get_name()
const;
111 void set_name(
const std::string&
name);
125 bool has_location()
const;
133 void set_location_x(
i32 x);
141 i32 get_location_x()
const;
149 void set_location_y(
i32 y);
157 i32 get_location_y()
const;
165 void set_location(
const std::pair<i32, i32>& location);
174 std::pair<i32, i32> get_location()
const;
181 Module* get_module()
const;
192 std::vector<Module*> get_modules(
const std::function<
bool(
Module*)>& filter =
nullptr,
bool recursive =
true)
const;
226 std::unordered_map<std::string, BooleanFunction> get_boolean_functions(
bool only_custom_functions =
false)
const;
251 bool mark_vcc_gate();
258 bool mark_gnd_gate();
265 bool unmark_vcc_gate();
272 bool unmark_gnd_gate();
279 bool is_vcc_gate()
const;
286 bool is_gnd_gate()
const;
297 const std::vector<Net*>& get_fan_in_nets()
const;
306 std::vector<Net*> get_fan_in_nets(
const std::function<
bool(
Net*)>& filter)
const;
314 Net* get_fan_in_net(
const std::string& pin_name)
const;
322 Net* get_fan_in_net(
const GatePin* pin)
const;
330 bool is_fan_in_net(
const Net*
net)
const;
337 const std::vector<Endpoint*>& get_fan_in_endpoints()
const;
346 std::vector<Endpoint*> get_fan_in_endpoints(
const std::function<
bool(
Endpoint*)>& filter)
const;
354 Endpoint* get_fan_in_endpoint(
const std::string& pin_name)
const;
377 const std::vector<Net*>& get_fan_out_nets()
const;
386 std::vector<Net*> get_fan_out_nets(
const std::function<
bool(
Net*)>& filter)
const;
394 Net* get_fan_out_net(
const std::string& pin_name)
const;
402 Net* get_fan_out_net(
const GatePin* pin)
const;
410 bool is_fan_out_net(
const Net*
net)
const;
417 const std::vector<Endpoint*>& get_fan_out_endpoints()
const;
426 std::vector<Endpoint*> get_fan_out_endpoints(
const std::function<
bool(
Endpoint*)>& filter)
const;
434 Endpoint* get_fan_out_endpoint(
const std::string& pin_name)
const;
459 std::vector<Gate*> get_unique_predecessors(
const std::function<
bool(
const GatePin* pin,
Endpoint* ep)>& filter =
nullptr)
const;
468 std::vector<Endpoint*> get_predecessors(
const std::function<
bool(
const GatePin* pin,
Endpoint* ep)>& filter =
nullptr)
const;
477 Endpoint* get_predecessor(
const std::string& pin_name)
const;
495 std::vector<Gate*> get_unique_successors(
const std::function<
bool(
const GatePin* pin,
Endpoint* ep)>& filter =
nullptr)
const;
504 std::vector<Endpoint*> get_successors(
const std::function<
bool(
const GatePin* pin,
Endpoint* ep)>& filter =
nullptr)
const;
513 Endpoint* get_successor(
const std::string& pin_name)
const;
547 Gate& operator=(
const Gate&) =
delete;
575 std::vector<Endpoint*> m_in_endpoints;
576 std::vector<Endpoint*> m_out_endpoints;
577 std::vector<Net*> m_in_nets;
578 std::vector<Net*> m_out_nets;
581 std::unordered_map<std::string, BooleanFunction> m_functions;