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) {
|
const char *fmt, const A &...args) {
|
||||||
octa::Size argidx = 0, written = 0, retn = 0;
|
octa::Size argidx = 0, written = 0, retn = 0;
|
||||||
while (*fmt) {
|
while (*fmt) {
|
||||||
if (*fmt == '{') {
|
if (*fmt == '%') {
|
||||||
|
++fmt;
|
||||||
|
if (*fmt == '%') goto plain;
|
||||||
octa::Size needidx = argidx;
|
octa::Size needidx = argidx;
|
||||||
if (*++fmt != '}') {
|
if (*fmt != 's') {
|
||||||
char idx[8] = { '\0' };
|
char idx[8] = { '\0' };
|
||||||
for (octa::Size i = 0; isdigit(*fmt); ++i)
|
for (octa::Size i = 0; isdigit(*fmt); ++i)
|
||||||
idx[i] = *fmt++;
|
idx[i] = *fmt++;
|
||||||
assert((*fmt == '}') && "malformed format string");
|
assert((*fmt++ == '$') && "malformed format string");
|
||||||
needidx = atoi(idx);
|
needidx = atoi(idx);
|
||||||
} else ++argidx;
|
} else ++argidx;
|
||||||
++fmt;
|
assert((*fmt++ == 's') && "malformed format string");
|
||||||
retn = octa::max(needidx, retn);
|
retn = octa::max(needidx, retn);
|
||||||
written += octa::detail::write_idx(writer, needidx,
|
written += octa::detail::write_idx(writer, needidx,
|
||||||
args...);
|
args...);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
plain:
|
||||||
writer.put(*fmt++);
|
writer.put(*fmt++);
|
||||||
++written;
|
++written;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue