#include <ostd/algorithm.hh>
#include <ostd/vector.hh>
#include <ostd/map.hh>
#include <ostd/range.hh>
#include <ostd/io.hh>
using namespace ostd;
struct Foo {
template<typename R>
bool to_format(R &writer, const FormatSpec &fs) const {
switch (fs.spec()) {
case 'i':
writer.put_n("foo", 3);
break;
default:
writer.put_n("bar", 3);
break;
}
return true;
}
};
int main() {
Vector<int> x = { 5, 10, 15, 20 };
writefln("[%(%s|%)]", x);
int y[] = { 2, 4, 8, 16, 32 };
writefln("{ %(%s, %) }", y);
writefln("[\n%([ %(%s, %) ]%|,\n%)\n]", map(range(10), [](int v) {
return range(v + 1);
}));
Map<String, int> m = {
{ "foo", 5 },
{ "bar", 10 },
{ "baz", 15 }
};
/* strings and chars are automatically escaped */
writefln("{ %(%s: %d, %) }", m);
/* can override escaping with the - flag */
writefln("{ %-(%s: %d, %) }", m);
/* custom format */
writefln("%s", Foo());
writefln("%i", Foo());
/* format into string */
auto s = appender<String>();
format(s, "hello %s", "world");
writeln(s.get());
return 0;
}
/*
[5|10|15|20]
{ 2, 4, 8, 16, 32 }
[
[ 0 ],
[ 0, 1 ],
[ 0, 1, 2 ],
[ 0, 1, 2, 3 ],
[ 0, 1, 2, 3, 4 ],
[ 0, 1, 2, 3, 4, 5 ],
[ 0, 1, 2, 3, 4, 5, 6 ],
[ 0, 1, 2, 3, 4, 5, 6, 7 ],
[ 0, 1, 2, 3, 4, 5, 6, 7, 8 ],
[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
]
{ "baz": 15, "bar": 10, "foo": 5 }
{ baz: 15, bar: 10, foo: 5 }
bar
foo
hello world
*/
I2luY2x1ZGUgPG9zdGQvYWxnb3JpdGhtLmhoPgojaW5jbHVkZSA8b3N0ZC92ZWN0b3IuaGg+CiNpbmNsdWRlIDxvc3RkL21hcC5oaD4KI2luY2x1ZGUgPG9zdGQvcmFuZ2UuaGg+CiNpbmNsdWRlIDxvc3RkL2lvLmhoPgoKdXNpbmcgbmFtZXNwYWNlIG9zdGQ7CgpzdHJ1Y3QgRm9vIHsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFI+CiAgICBib29sIHRvX2Zvcm1hdChSICZ3cml0ZXIsIGNvbnN0IEZvcm1hdFNwZWMgJmZzKSBjb25zdCB7CiAgICAgICAgc3dpdGNoIChmcy5zcGVjKCkpIHsKICAgICAgICBjYXNlICdpJzoKICAgICAgICAgICAgd3JpdGVyLnB1dF9uKCJmb28iLCAzKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgd3JpdGVyLnB1dF9uKCJiYXIiLCAzKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBWZWN0b3I8aW50PiB4ID0geyA1LCAxMCwgMTUsIDIwIH07CiAgICB3cml0ZWZsbigiWyUoJXN8JSldIiwgeCk7CgogICAgaW50IHlbXSA9IHsgMiwgNCwgOCwgMTYsIDMyIH07CiAgICB3cml0ZWZsbigieyAlKCVzLCAlKSB9IiwgeSk7CgogICAgd3JpdGVmbG4oIltcbiUoWyAlKCVzLCAlKSBdJXwsXG4lKVxuXSIsIG1hcChyYW5nZSgxMCksIFtdKGludCB2KSB7CiAgICAgICAgcmV0dXJuIHJhbmdlKHYgKyAxKTsKICAgIH0pKTsKCiAgICBNYXA8U3RyaW5nLCBpbnQ+IG0gPSB7CiAgICAgICAgeyAiZm9vIiwgNSAgfSwKICAgICAgICB7ICJiYXIiLCAxMCB9LAogICAgICAgIHsgImJheiIsIDE1IH0KICAgIH07CiAgICAvKiBzdHJpbmdzIGFuZCBjaGFycyBhcmUgYXV0b21hdGljYWxseSBlc2NhcGVkICovCiAgICB3cml0ZWZsbigieyAlKCVzOiAlZCwgJSkgfSIsIG0pOwogICAgLyogY2FuIG92ZXJyaWRlIGVzY2FwaW5nIHdpdGggdGhlIC0gZmxhZyAqLwogICAgd3JpdGVmbG4oInsgJS0oJXM6ICVkLCAlKSB9IiwgbSk7CgogICAgLyogY3VzdG9tIGZvcm1hdCAqLwogICAgd3JpdGVmbG4oIiVzIiwgRm9vKCkpOwogICAgd3JpdGVmbG4oIiVpIiwgRm9vKCkpOwoKICAgIC8qIGZvcm1hdCBpbnRvIHN0cmluZyAqLwogICAgYXV0byBzID0gYXBwZW5kZXI8U3RyaW5nPigpOwogICAgZm9ybWF0KHMsICJoZWxsbyAlcyIsICJ3b3JsZCIpOwogICAgd3JpdGVsbihzLmdldCgpKTsKCiAgICByZXR1cm4gMDsKfQoKLyoKWzV8MTB8MTV8MjBdCnsgMiwgNCwgOCwgMTYsIDMyIH0KWwpbIDAgXSwKWyAwLCAxIF0sClsgMCwgMSwgMiBdLApbIDAsIDEsIDIsIDMgXSwKWyAwLCAxLCAyLCAzLCA0IF0sClsgMCwgMSwgMiwgMywgNCwgNSBdLApbIDAsIDEsIDIsIDMsIDQsIDUsIDYgXSwKWyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3IF0sClsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCBdLApbIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgXQpdCnsgImJheiI6IDE1LCAiYmFyIjogMTAsICJmb28iOiA1IH0KeyBiYXo6IDE1LCBiYXI6IDEwLCBmb286IDUgfQpiYXIKZm9vCmhlbGxvIHdvcmxkCiov