66 static std::unique_ptr<GateTypeComponent>
create_lut_component(std::unique_ptr<GateTypeComponent> component,
bool init_ascending);
84 static std::unique_ptr<GateTypeComponent>
create_latch_component(std::unique_ptr<GateTypeComponent> component);
93 static std::unique_ptr<GateTypeComponent>
create_ram_component(std::unique_ptr<GateTypeComponent> component,
const u32 bit_size);
109 static std::unique_ptr<GateTypeComponent>
create_init_component(
const std::string& init_category,
const std::vector<std::string>& init_identifiers);
119 static std::unique_ptr<GateTypeComponent>
create_state_component(std::unique_ptr<GateTypeComponent> component,
const std::string& state_identifier,
const std::string& neg_state_identifier);
133 const std::string& data_group,
134 const std::string& addr_group,
155 if (T::is_class_of(
this))
157 return static_cast<T*
>(
this);
169 if (T::is_class_of(
this))
171 return static_cast<const T*
>(
this);
208 if (component !=
nullptr)
virtual ~GateTypeComponent()=default
virtual std::vector< GateTypeComponent * > get_components(const std::function< bool(const GateTypeComponent *)> &filter=nullptr) const =0
const T * convert_to() const
virtual ComponentType get_type() const =0
static std::unique_ptr< GateTypeComponent > create_state_component(std::unique_ptr< GateTypeComponent > component, const std::string &state_identifier, const std::string &neg_state_identifier)
static std::unique_ptr< GateTypeComponent > create_lut_component(std::unique_ptr< GateTypeComponent > component, bool init_ascending)
static std::unique_ptr< GateTypeComponent > create_init_component(const std::string &init_category, const std::vector< std::string > &init_identifiers)
static std::unique_ptr< GateTypeComponent > create_latch_component(std::unique_ptr< GateTypeComponent > component)
T * get_component_as(const std::function< bool(const GateTypeComponent *)> &filter=nullptr)
static std::unique_ptr< GateTypeComponent > create_ram_component(std::unique_ptr< GateTypeComponent > component, const u32 bit_size)
static std::unique_ptr< GateTypeComponent > create_ff_component(std::unique_ptr< GateTypeComponent > component, const BooleanFunction &next_state_bf, const BooleanFunction &clock_bf)
static std::unique_ptr< GateTypeComponent > create_ram_port_component(std::unique_ptr< GateTypeComponent > component, const std::string &data_group, const std::string &addr_group, const BooleanFunction &clock_bf, const BooleanFunction &enable_bf, bool is_write)
GateTypeComponent * get_component(const std::function< bool(const GateTypeComponent *)> &filter=nullptr) const
static std::unique_ptr< GateTypeComponent > create_mac_component()