8#ifndef OUTPUT_FORMAT_HELPER_H
9#define OUTPUT_FORMAT_HELPER_H
14using namespace std::literals;
33 : mDefaultIndent{indent}
37 operator std::string_view() const& {
return {mOutput}; }
39 auto size()
const {
return mOutput.size(); }
45 void InsertAt(
const size_t atPos, std::string_view data) { mOutput.insert(atPos, data); }
52 void SetIndent(
const unsigned indent,
const SkipIndenting skipIndenting = SkipIndenting::No)
54 mDefaultIndent = indent;
56 if(SkipIndenting::No == skipIndenting) {
57 Indent(mDefaultIndent);
65 mDefaultIndent = rhs.mDefaultIndent;
67 if(SkipIndenting::No == skipIndenting) {
68 Indent(mDefaultIndent);
76 bool empty()
const {
return mOutput.empty() or (std::string::npos == mOutput.find_first_not_of(
' ', 0)); }
84 void Append(
const char c) { mOutput += c; }
86 void Append(
const std::string_view& arg) { mOutput += arg; }
111 if constexpr(0 <
sizeof...(args)) {
133 if constexpr(0 <
sizeof...(args)) {
147 const NameOnly nameOnly = NameOnly::No,
148 const GenMissingParamName genMissingParamName = GenMissingParamName::No);
155 if(mDefaultIndent >= SCOPE_INDENT) {
156 mDefaultIndent -= SCOPE_INDENT;
172 void CloseScope(
const NoNewLineBefore newLineBefore = NoNewLineBefore::No);
193 template<
typename... Args>
196 if constexpr(0 <
sizeof...(args)) {
221 for(
OnceFalse needsComma{};
const auto& arg : arguments) {
222 if constexpr(std::is_same_v<
const TemplateArgument&,
decltype(arg)>) {
223 if((TemplateArgument::Pack == arg.getKind()) and (0 == arg.pack_size())) {
238 static constexpr unsigned SCOPE_INDENT{2};
239 unsigned mDefaultIndent{};
240 std::string mOutput{};
242 void Indent(
unsigned count);
246 Indent(mDefaultIndent);
void StrCat(std::string &ret, const auto &... args)
std::string StrCat(const auto &... args)