 |
Cerata
A library to generate structural hardware designs
|
20 #include "cerata/parameter.h"
21 #include "cerata/pool.h"
22 #include "cerata/graph.h"
23 #include "cerata/edge.h"
27 Parameter::Parameter(std::string name,
const std::shared_ptr<Type> &type, std::shared_ptr<Literal> default_value)
28 :
NormalNode(std::move(name),
Node::
NodeID::PARAMETER, type), default_value_(std::move(default_value)) {
37 default:CERATA_LOG(ERROR,
"Parameter default value can not be set implicitly.");
40 CERATA_LOG(ERROR,
"Parameter default value must be literal.");
45 std::shared_ptr<Parameter>
parameter(
const std::string &name,
46 const std::shared_ptr<Type> &type,
47 std::shared_ptr<Literal> default_value) {
48 auto p =
new Parameter(name, type, std::move(default_value));
49 return std::shared_ptr<Parameter>(p);
52 std::shared_ptr<Parameter>
parameter(
const std::string &name,
int default_value) {
56 std::shared_ptr<Parameter>
parameter(
const std::string &name,
bool default_value) {
60 std::shared_ptr<Parameter>
parameter(
const std::string &name, std::string default_value) {
61 return parameter(name,
string(),
strl(std::move(default_value)));
64 std::shared_ptr<Parameter>
parameter(
const std::string &name) {
70 return input().value()->src();
72 CERATA_LOG(FATAL,
"Parameter node " +
name() +
" lost input edge.");
78 CERATA_LOG(FATAL,
"Parameter value can not be or refer to signal or port nodes.");
87 result->meta = this->
meta;
92 trace->push_back(
this);
93 if (
value()->IsParameter()) {
94 value()->AsParameter()->TraceValue(trace);
96 trace->push_back(
value());
std::shared_ptr< Literal > booll(bool value)
Return a literal node representing a Boolean.
void TraceValue(std::vector< Node * > *trace)
Append this node and nodes that source this node's value, until an expression or literal is encounter...
std::unordered_map< std::string, std::string > meta
KV storage for metadata of tools or specific backend implementations.
Node * value() const
Return the value node.
Contains every Cerata class, function, etc...
std::shared_ptr< Type > type_
The Type of this Node.
std::shared_ptr< Literal > default_value_
Parameter value.
ID id() const
Return the Type ID.
Parameter * SetValue(const std::shared_ptr< Node > &value)
Set the value of the parameter node. Can only be expression, parameter, or literal.
std::shared_ptr< Literal > strl(std::string str)
Obtain a shared pointer to a string literal from the default node pool.
std::string name() const
Return the name of the object.
NodeID
Node type IDs with different properties.
Parameter(std::string name, const std::shared_ptr< Type > &type, std::shared_ptr< Literal > default_value)
Construct a new Parameter, optionally defining a default value Literal.
A single-input, multiple-outputs node.
std::shared_ptr< Object > Copy() const override
Create a copy of this Parameter.
std::shared_ptr< Literal > intl(int64_t i)
Obtain a shared pointer to an integer literal from the default node pool.
std::shared_ptr< Parameter > parameter(const std::string &name, const std::shared_ptr< Type > &type, std::shared_ptr< Literal > default_value)
Create a new parameter.
std::shared_ptr< Type > integer()
Return a static integer type.
std::optional< Edge * > input() const
Return the single incoming edge.
Type * type() const
Return the node Type.
std::shared_ptr< Edge > Connect(Node *dst, Node *src)
Connect two nodes, returns the corresponding edge.