Use span in format
This commit is contained in:
1
.bazelrc
1
.bazelrc
@ -16,5 +16,6 @@ build --cxxopt=-Wno-documentation-unknown-command
|
|||||||
build --cxxopt=-Wno-extra-semi-stmt
|
build --cxxopt=-Wno-extra-semi-stmt
|
||||||
build --cxxopt=-Wno-extra-semi
|
build --cxxopt=-Wno-extra-semi
|
||||||
build --cxxopt=-Wno-global-constructors
|
build --cxxopt=-Wno-global-constructors
|
||||||
|
build --cxxopt=-Wno-unsafe-buffer-usage
|
||||||
|
|
||||||
test --test_output=errors
|
test --test_output=errors
|
||||||
|
@ -5,13 +5,12 @@
|
|||||||
void asl::format_internals::format(
|
void asl::format_internals::format(
|
||||||
writer* writer,
|
writer* writer,
|
||||||
const char* fmt,
|
const char* fmt,
|
||||||
const type_erased_arg* args,
|
span<const type_erased_arg> args)
|
||||||
int64_t arg_count)
|
|
||||||
{
|
{
|
||||||
formatter f(writer);
|
formatter f(writer);
|
||||||
|
|
||||||
|
const auto* arg_it = args.begin();
|
||||||
int64_t arg = 0;
|
const auto* arg_end = args.end();
|
||||||
|
|
||||||
const char* begin = fmt;
|
const char* begin = fmt;
|
||||||
while (*fmt != '\0')
|
while (*fmt != '\0')
|
||||||
@ -20,14 +19,14 @@ void asl::format_internals::format(
|
|||||||
{
|
{
|
||||||
if (fmt[1] == '}')
|
if (fmt[1] == '}')
|
||||||
{
|
{
|
||||||
if (arg < arg_count)
|
if (arg_it < arg_end)
|
||||||
{
|
{
|
||||||
f.write(begin, fmt - begin);
|
f.write(begin, fmt - begin);
|
||||||
fmt += 2;
|
fmt += 2;
|
||||||
begin = fmt;
|
begin = fmt;
|
||||||
|
|
||||||
args[arg].fn(f, args[arg].data);
|
arg_it->fn(f, arg_it->data);
|
||||||
arg += 1;
|
arg_it++; // NOLINT(*-pointer-arithmetic)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -168,7 +167,7 @@ void asl::AslFormat(formatter& f, uint64_t v)
|
|||||||
else if (v > 0 || cursor == kMaxDigits)
|
else if (v > 0 || cursor == kMaxDigits)
|
||||||
{
|
{
|
||||||
ASL_ASSERT(v < 10);
|
ASL_ASSERT(v < 10);
|
||||||
write_one('0' + (char)v);
|
write_one('0' + static_cast<char>(v));
|
||||||
}
|
}
|
||||||
|
|
||||||
f.write(buffer + cursor, kMaxDigits - cursor);
|
f.write(buffer + cursor, kMaxDigits - cursor);
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "asl/integers.hpp"
|
#include "asl/integers.hpp"
|
||||||
#include "asl/meta.hpp"
|
#include "asl/meta.hpp"
|
||||||
#include "asl/io.hpp"
|
#include "asl/io.hpp"
|
||||||
|
#include "asl/span.hpp"
|
||||||
|
|
||||||
namespace asl
|
namespace asl
|
||||||
{
|
{
|
||||||
@ -37,7 +38,7 @@ struct type_erased_arg
|
|||||||
};
|
};
|
||||||
|
|
||||||
// @Todo Use span
|
// @Todo Use span
|
||||||
void format(writer*, const char* fmt, const type_erased_arg* args, int64_t arg_count);
|
void format(writer*, const char* fmt, span<const type_erased_arg> args);
|
||||||
|
|
||||||
} // namespace internals
|
} // namespace internals
|
||||||
|
|
||||||
@ -67,11 +68,11 @@ void format(writer* w, const char* fmt, const Args&... args)
|
|||||||
format_internals::type_erased_arg(args)...
|
format_internals::type_erased_arg(args)...
|
||||||
};
|
};
|
||||||
|
|
||||||
format_internals::format(w, fmt, type_erased_args, types_count<Args...>);
|
format_internals::format(w, fmt, type_erased_args);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
format_internals::format(w, fmt, nullptr, 0);
|
format_internals::format(w, fmt, {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user