using namespace std::string_literals; // NOLINT
using namespace cemplate; // NOLINT
ost << Include("cstddef") << '\n';
ost << IncludeL(include_name) << '\n';
const auto init_f = [](const auto& menu)
{
return InitlistNode({
string(menu.title()),
menu.code(),
InitlistNode(std::begin(menu.items()),
std::end(menu.items()),
[](const auto& item) -> InitlistNode
{
return {
string(item.prompt),
item.code,
};
}),
});
};
Program prog(ost);
ost << Namespace(args.nspace);
prog.include("cstddef")
.line_empty()
.includeL(include_name)
.line_empty()
.namespace_open(args.nspace);
// clang-format off
for (const auto& [code, menu] : inst.menu_lookup())
for (const auto& [_, menu] : inst.menu_lookup())
{
ost << Function(
menu.code(),
"extern int",
{{{"std::size_t"s, "/* unused */"s}}}
)
<< Declaration("static const menu_t", "menu",
Initlist({
String(menu.title()),
menu.code(),
accumulate_items(menu),
}))
<< Return("menu_t::visit(menu)")
<< Function(menu.code());
prog.function_open(
menu.code(), "extern int", {{{"std::size_t"s, "/* unused */"s}}})
.declaration("static const menu_t", "menu", init_f(menu))
.ret("menu_t::visit(menu)")
.function_close(menu.code());
}
// clang-format on
ost << Namespace(args.nspace);
prog.namespace_close(args.nspace);
}
int parse_opt(int key, const char* arg, poafloc::Parser* parser)