Skip to content

Commit 008a4a5

Browse files
committed
Default parameters support with ReactorBanks
1 parent 3ab09b9 commit 008a4a5

File tree

5 files changed

+39
-14
lines changed

5 files changed

+39
-14
lines changed

examples/sdk-SrcSink/Config-a/Config-a.cc

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,22 @@
22

33
UserParameters cfg_parameters;
44

5-
ConfigParameter<int, uint32_t>::ParametersMap UserParameters::homogeneous_config() {
5+
ConfigParameter<int, uint32_t, string>::ParametersMap UserParameters::homogeneous_config() {
66
return {
7-
{"Main.Source.iterations", ConfigParameterMetadata<int> { 5 } }
7+
{"Main.Source.iterations", ConfigParameterMetadata<int> { 5 } },
8+
// {"Main.Sink.name", ConfigParameterMetadata<string> { "Homog Name" } },
89
};
910
}
1011

11-
ConfigParameter<int, uint32_t>::ParametersMap UserParameters::heterogeneous_config() {
12+
ConfigParameter<int, uint32_t, string>::ParametersMap UserParameters::heterogeneous_config() {
1213
return {
1314
{"Main.Source.iterations", ConfigParameterMetadata<int> { 20 } },
1415
{"Main.Source.n_ports", ConfigParameterMetadata<int> { 4 } },
1516
{"Main.n_sinks", ConfigParameterMetadata<int> { 4 } },
17+
// {"Main.Sink_0.name", ConfigParameterMetadata<string> { "Hetero Name 0" } },
18+
// {"Main.Sink_1.name", ConfigParameterMetadata<string> { "Hetero Name 1" } },
19+
// {"Main.Sink_2.name", ConfigParameterMetadata<string> { "Hetero Name 2" } },
20+
// {"Main.Sink_3.name", ConfigParameterMetadata<string> { "Hetero Name 3" } },
1621

1722
};
1823
}

examples/sdk-SrcSink/Config-a/Config-a.hh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88

99
using namespace sdk;
1010

11-
struct UserParameters : public ConfigParameter<int, uint32_t> {
12-
ConfigParameter<int, uint32_t>::ParametersMap homogeneous_config();
13-
ConfigParameter<int, uint32_t>::ParametersMap heterogeneous_config();
11+
struct UserParameters : public ConfigParameter<int, uint32_t, string> {
12+
ConfigParameter<int, uint32_t, string>::ParametersMap homogeneous_config();
13+
ConfigParameter<int, uint32_t, string>::ParametersMap heterogeneous_config();
1414
};
1515

1616
extern UserParameters cfg_parameters;

examples/sdk-SrcSink/Main/MainReactor.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ void MainReactor::construction() {
77
src = std::make_unique<SourceReactor>("Source", this);
88

99
for (int i = 0; i < parameters.n_sinks.value; i++) {
10-
snk.create_reactor();
10+
snk.create_reactor(SinkReactor::DefaultParameters{.name = "Default Sink Name"});
1111
}
1212
}
1313

examples/sdk-SrcSink/Sink/SinkReactor.hh

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,30 @@ using namespace sdk;
66

77
class SinkReactor : public Reactor {
88
public:
9-
struct Parameters : public SystemParameter<string> {
10-
REACTOR_PARAMETER(string, name, "Alternate name", "Sink", "Sink", "Sink");
119

12-
Parameters(Reactor *container)
13-
: SystemParameter<string>(container) {
10+
struct DefaultParameters {
11+
string name = "Sink";
12+
};
13+
struct Parameters : public SystemParameterWithDefault<DefaultParameters, string> {
14+
REACTOR_PARAMETER(string, name, "Alternate name", "Sink", "Sink", defaults.name);
15+
16+
Parameters(Reactor *container, DefaultParameters &&param)
17+
: SystemParameterWithDefault<DefaultParameters, string>(container, std::forward<DefaultParameters>(param)) {
1418
register_parameters (name);
1519
}
1620
};
1721

1822
SinkReactor(const std::string &name, Environment *env)
19-
: Reactor(name, env) {}
23+
: Reactor(name, env), parameters{this, DefaultParameters{}} {}
2024
SinkReactor(const std::string &name, Reactor *container)
21-
: Reactor(name, container) {}
25+
: Reactor(name, container), parameters{this, DefaultParameters{}} {}
26+
27+
SinkReactor(const std::string &name, Environment *env, DefaultParameters && param)
28+
: Reactor(name, env), parameters{this, std::forward<DefaultParameters>(param)} {}
29+
SinkReactor(const std::string &name, Reactor *container, DefaultParameters && param)
30+
: Reactor(name, container), parameters{this, std::forward<DefaultParameters>(param)} {}
2231

23-
Parameters parameters{this};
32+
Parameters parameters;
2433

2534
Input<int> req{"req", this};
2635
Output<int> rsp{"rsp", this};

include/reactor-sdk/ReactorBank.hh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,17 @@ public:
447447
reactors.back()->bank_index_ = index++;
448448
}
449449

450+
template <class... Args> void create_reactor(Args&&... args) noexcept {
451+
assert (e_parent || r_parent);
452+
std::string bank_name = name + "\r\n" + std::to_string(index);
453+
if (e_parent) {
454+
reactors.emplace_back(std::make_unique<ReactorType>(bank_name, e_parent, std::forward<Args>(args)...));
455+
} else {
456+
reactors.emplace_back(std::make_unique<ReactorType>(bank_name, r_parent, std::forward<Args>(args)...));
457+
}
458+
reactors.back()->bank_index_ = index++;
459+
}
460+
450461
template <class... Args> void emplace_back(Args&&... args) noexcept {
451462
reactors.emplace_back(std::forward<Args>(args)...);
452463
reactors.back()->bank_index_ = index++;

0 commit comments

Comments
 (0)