forked from OctaForge/libostd
use c style formatting for strings (but type-generic, i.e. %s prints any value)
This commit is contained in:
parent
e6e1020702
commit
598fcbfa25
|
@ -120,21 +120,24 @@ static inline octa::Size formatted_write(R writer, octa::Size &fmtn,
|
|||
const char *fmt, const A &...args) {
|
||||
octa::Size argidx = 0, written = 0, retn = 0;
|
||||
while (*fmt) {
|
||||
if (*fmt == '{') {
|
||||
if (*fmt == '%') {
|
||||
++fmt;
|
||||
if (*fmt == '%') goto plain;
|
||||
octa::Size needidx = argidx;
|
||||
if (*++fmt != '}') {
|
||||
if (*fmt != 's') {
|
||||
char idx[8] = { '\0' };
|
||||
for (octa::Size i = 0; isdigit(*fmt); ++i)
|
||||
idx[i] = *fmt++;
|
||||
assert((*fmt == '}') && "malformed format string");
|
||||
assert((*fmt++ == '$') && "malformed format string");
|
||||
needidx = atoi(idx);
|
||||
} else ++argidx;
|
||||
++fmt;
|
||||
assert((*fmt++ == 's') && "malformed format string");
|
||||
retn = octa::max(needidx, retn);
|
||||
written += octa::detail::write_idx(writer, needidx,
|
||||
args...);
|
||||
continue;
|
||||
}
|
||||
plain:
|
||||
writer.put(*fmt++);
|
||||
++written;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue