Skip to content
Snippets Groups Projects
Unverified Commit 604e27f4 authored by Nora Abi Akar's avatar Nora Abi Akar Committed by GitHub
Browse files

Allow arbitrary argument name for NET_RECEIVE (#1258)

Fixes #1257
parent 64001961
No related branches found
No related tags found
No related merge requests found
......@@ -369,21 +369,24 @@ std::string emit_cpp_source(const Module& module_, const printer_options& opt) {
// Nrn methods:
net_receive && out <<
"void " << class_name << "::deliver_events(deliverable_event_stream::state events) {\n" << indent <<
"auto ncell = events.n_streams();\n"
"for (size_type c = 0; c<ncell; ++c) {\n" << indent <<
"auto begin = events.begin_marked(c);\n"
"auto end = events.end_marked(c);\n"
"for (auto p = begin; p<end; ++p) {\n" << indent <<
"if (p->mech_id==mechanism_id_) net_receive(p->mech_index, p->weight);\n" << popindent <<
"}\n" << popindent <<
"}\n" << popindent <<
"}\n"
"\n"
"void " << class_name << "::net_receive(int i_, value_type weight) {\n" << indent <<
cprint(net_receive->body()) << popindent <<
"}\n\n";
if (net_receive) {
const std::string weight_arg = net_receive->args().empty() ? "weight" : net_receive->args().front()->is_argument()->name();
out <<
"void " << class_name << "::deliver_events(deliverable_event_stream::state events) {\n" << indent <<
"auto ncell = events.n_streams();\n"
"for (size_type c = 0; c<ncell; ++c) {\n" << indent <<
"auto begin = events.begin_marked(c);\n"
"auto end = events.end_marked(c);\n"
"for (auto p = begin; p<end; ++p) {\n" << indent <<
"if (p->mech_id==mechanism_id_) net_receive(p->mech_index, p->weight);\n" << popindent <<
"}\n" << popindent <<
"}\n" << popindent <<
"}\n"
"\n"
"void " << class_name << "::net_receive(int i_, value_type " << weight_arg << ") {\n" << indent <<
cprint(net_receive->body()) << popindent <<
"}\n\n";
}
auto emit_body = [&](APIMethod *p) {
if (with_simd) {
......
......@@ -293,6 +293,7 @@ std::string emit_gpu_cu_source(const Module& module_, const printer_options& opt
// event delivery
if (net_receive) {
const std::string weight_arg = net_receive->args().empty() ? "weight" : net_receive->args().front()->is_argument()->name();
out << "__global__\n"
<< "void deliver_events(int mech_id_, " << ppack_name << " params_, "
<< "deliverable_event_stream_state events) {\n" << indent
......@@ -305,7 +306,7 @@ std::string emit_gpu_cu_source(const Module& module_, const printer_options& opt
<< "for (auto p = begin; p<end; ++p) {\n" << indent
<< "if (p->mech_id==mech_id_) {\n" << indent
<< "auto tid_ = p->mech_index;\n"
<< "auto weight = p->weight;\n"
<< "auto " << weight_arg << " = p->weight;\n"
<< cuprint(net_receive->body())
<< popindent << "}\n"
<< popindent << "}\n"
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment