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;