38 #include <unordered_map>
39 #include <unordered_set>
59 ssize_t get_hash()
const;
68 std::vector<GateTypeComponent*> get_components(
const std::function<
bool(
const GateTypeComponent*)>& filter =
nullptr)
const;
92 if (component !=
nullptr)
120 const std::string& get_name()
const;
134 std::set<GateTypeProperty> get_properties()
const;
142 std::vector<GateTypeProperty> get_property_list()
const;
164 std::string to_string()
const;
181 bool operator==(
const GateType& other)
const;
189 bool operator!=(
const GateType& other)
const;
197 u32 get_unique_pin_id();
205 u32 get_unique_pin_group_id();
238 std::vector<GatePin*> get_pins(
const std::function<
bool(
GatePin*)>& filter =
nullptr)
const;
247 std::vector<std::string> get_pin_names(
const std::function<
bool(
GatePin*)>& filter =
nullptr)
const;
254 std::vector<GatePin*> get_input_pins()
const;
261 std::vector<std::string> get_input_pin_names()
const;
268 std::vector<GatePin*> get_output_pins()
const;
275 std::vector<std::string> get_output_pin_names()
const;
291 GatePin* get_pin_by_name(
const std::string&
name)
const;
307 const std::string&
name,
308 const std::vector<GatePin*>
pins = {},
313 bool delete_empty_groups =
true);
328 Result<PinGroup<GatePin>*> create_pin_group(
const std::string&
name,
329 const std::vector<GatePin*>
pins = {},
334 bool delete_empty_groups =
true);
343 std::vector<PinGroup<GatePin>*> get_pin_groups(
const std::function<
bool(PinGroup<GatePin>*)>& filter =
nullptr)
const;
351 PinGroup<GatePin>* get_pin_group_by_id(
const u32 id)
const;
359 PinGroup<GatePin>* get_pin_group_by_name(
const std::string&
name)
const;
367 bool delete_pin_group(PinGroup<GatePin>* pin_group);
377 Result<std::monostate> assign_pin_to_group(PinGroup<GatePin>* pin_group, GatePin* pin,
bool delete_empty_groups =
true);
386 bool set_pin_group_name(PinGroup<GatePin>* pin_group,
const std::string& new_name);
395 bool set_pin_group_type(PinGroup<GatePin>* pin_group,
PinType new_type);
404 bool set_pin_group_direction(PinGroup<GatePin>* pin_group,
PinDirection new_direction);
412 void add_boolean_function(
const std::string&
name,
const BooleanFunction&
function);
419 void add_boolean_functions(
const std::unordered_map<std::string, BooleanFunction>& functions);
426 const std::unordered_map<std::string, BooleanFunction>& get_boolean_functions()
const;
435 BooleanFunction get_boolean_function(
const std::string&
name)
const;
444 BooleanFunction get_boolean_function(
const GatePin* pin =
nullptr)
const;
452 std::set<GateTypeProperty> m_properties;
453 std::unique_ptr<GateTypeComponent> m_component;
457 std::set<u32> m_used_pin_ids;
458 std::set<u32> m_free_pin_ids;
459 u32 m_next_pin_group_id;
460 std::set<u32> m_used_pin_group_ids;
461 std::set<u32> m_free_pin_group_ids;
463 std::vector<std::unique_ptr<GatePin>> m_pins;
464 std::unordered_map<u32, GatePin*> m_pins_map;
465 std::unordered_map<std::string, GatePin*> m_pin_names_map;
466 std::vector<std::unique_ptr<PinGroup<GatePin>>> m_pin_groups;
467 std::unordered_map<u32, PinGroup<GatePin>*> m_pin_groups_map;
468 std::unordered_map<std::string, PinGroup<GatePin>*> m_pin_group_names_map;
469 std::list<PinGroup<GatePin>*> m_pin_groups_ordered;
472 std::unordered_map<std::string, BooleanFunction> m_functions;
474 GateType(
GateLibrary* gate_library,
u32 id,
const std::string&
name, std::set<GateTypeProperty> properties, std::unique_ptr<GateTypeComponent> component =
nullptr);
T * get_component_as(const std::function< bool(const GateTypeComponent *)> &filter=nullptr) const
GateLibrary * get_gate_library(const std::string &file_path)
std::ostream & operator<<(std::ostream &os, BooleanFunction::Value v)
std::vector< PinInformation > pins