Cerata
A library to generate structural hardware designs
|
A node. More...
#include <node.h>
Public Types | |
enum | NodeID { NodeID::PORT, NodeID::SIGNAL, NodeID::PARAMETER, NodeID::LITERAL, NodeID::EXPRESSION } |
Node type IDs with different properties. More... | |
![]() | |
enum | ID { NODE, ARRAY } |
Object type ID to conveniently cast the object during run-time. More... | |
Public Member Functions | |
Node (std::string name, NodeID id, std::shared_ptr< Type > type) | |
Node constructor. | |
Type * | type () const |
Return the node Type. | |
Node * | SetType (const std::shared_ptr< Type > &type) |
Set the node Type. | |
NodeID | node_id () const |
Return the node type ID. | |
bool | Is (NodeID node_id) const |
Return whether this node is of a specific node type id. | |
virtual bool | AddEdge (const std::shared_ptr< Edge > &edge)=0 |
Add an edge to this node. | |
virtual bool | RemoveEdge (Edge *edge)=0 |
Remove an edge of this node. | |
virtual std::vector< Edge * > | edges () const |
Return all edges this Node is on. | |
virtual std::vector< Edge * > | sources () const |
Get the input edges of this Node. | |
virtual std::vector< Edge * > | sinks () const |
Get the output edges of this Node. | |
void | SetArray (NodeArray *array) |
Set parent array. | |
std::optional< NodeArray * > | array () const |
Return parent array, if any. | |
Node * | Replace (Node *replacement) |
Replace some node with another node, reconnecting all original edges. Returns the replaced node. | |
virtual Node * | CopyOnto (Graph *dst, const std::string &name, NodeMap *rebinding) const |
Copy node onto a graph, implicitly copying over and rebinding e.g. type generics of referenced nodes. More... | |
void | AppendReferences (std::vector< Object * > *out) const override |
Return all objects referenced by this node. For default nodes, these are type generics only. | |
virtual std::string | ToString () const |
Return a human-readable string of this node. | |
![]() | |
Object (std::string name, ID id) | |
Cerata object constructor. More... | |
ID | obj_id () const |
Return the object ID of this object. | |
bool | IsNode () const |
Return true if this object is a node. | |
bool | IsArray () const |
Return true if this object is an array. | |
virtual void | SetParent (Graph *parent) |
Set the parent graph of this object. | |
virtual std::optional< Graph * > | parent () const |
Return the parent graph of this object, if any. Returns empty option otherwise. | |
virtual std::shared_ptr< Object > | Copy () const =0 |
Deep-copy the object. | |
![]() | |
Named (std::string name) | |
Named constructor. | |
std::string | name () const |
Return the name of the object. | |
void | SetName (std::string name) |
Change the name of the object. | |
virtual | ~Named ()=default |
Destructor. | |
Protected Attributes | |
NodeID | node_id_ |
Node type ID. | |
std::shared_ptr< Type > | type_ |
The Type of this Node. | |
std::optional< NodeArray * > | array_ = {} |
Parent if this belongs to an array. | |
![]() | |
ID | obj_id_ |
The object type ID. | |
std::optional< Graph * > | parent_ = {} |
An optional parent Graph to which this Object belongs. Initially no value. | |
Additional Inherited Members | |
![]() | |
std::unordered_map< std::string, std::string > | meta |
KV storage for metadata of tools or specific backend implementations. | |
|
strong |
Node type IDs with different properties.
|
virtual |
Copy node onto a graph, implicitly copying over and rebinding e.g. type generics of referenced nodes.
Referenced nodes means any nodes this node references in its implementation (including its type), but not that it connects to through edges in the graph.
Implicitly rebinding means that, first, any referenced nodes will be searched for on the graph by name. If they don't exist, copies will be made onto the graph as well.
This function appends this node to the rebinding.
dst | The destination graph to copy the node onto. |
name | The name of the new node. |
rebinding | The rebinding to use, and to append, if required. |
Reimplemented in cerata::Expression.