std::string ret(const std::string& val)
{
return std::format("return {};\n", val);
return std::format("{}return {};\n", indent(), val);
}
std::string func_helper(const std::string& name,
const std::string& ret,
const std::vector<param_t>& params)
std::string string(const std::string& string)
{
static const auto format = [](const param_t& param)
{ return param.name.empty() ? param.type : param.type + ' ' + param.name; };
return std::format(R"("{}")", string);
}
std::string decl(const std::string& type, const std::string& name)
{
return std::format("{}{} {} = ", indent(), type, name);
}
std::string eval(const std::string& val, std::uint64_t lvl); // NOLINT
std::string eval(const initlist& list, std::uint64_t lvl); // NOLINT
std::string initlist::format(uint64_t lvl) const
{
std::string res;
res += ret + ' ';
res += name + '(';
if (!params.empty()) {
res += format(params[0]);
for (std::size_t i = 1; i < params.size(); i++) {
res += ", " + format(params[i]);
}
for (const auto& node : values) {
std::visit([&](const auto& value) { res += eval(value, lvl + 1); },
node.value());
}
return res;
}
std::string eval(const initlist& list, std::uint64_t lvl)
{
return std::format(
"{}{{\n{}{}}},\n", indent(lvl), list.format(lvl + 1), indent(lvl));
}
std::string eval(const std::string& val, std::uint64_t lvl)
{
return std::format("{}{},\n", indent(lvl), val);
}
std::ostream& operator<<(std::ostream& ost, const initlist& list)
{
return ost << std::format(
"{{\n{}{}}};\n", list.format(indent_lvl + 1), indent());
}
std::string func_helper(const std::string& name, // NOLINT
const std::string& ret,
const std::vector<param_t>& params)
{
static const auto format = [](const param_t& param)
{ return param.name.empty() ? param.type : param.type + ' ' + param.name; };
return std::format(
"{} {}({})", ret, name, accumulate<param_t>(params, format, ", "));
}
std::string func(const std::string& name,
const std::string& ret,
const std::vector<param_t>& params)