Format ranges
This commit is contained in:
parent
cbc68c2c43
commit
4aaa71a7d0
@ -728,6 +728,23 @@ if (is(T == struct))
|
||||
}
|
||||
}
|
||||
|
||||
private void formatRange(T)(ref T arg, ref String result)
|
||||
if (isInputRange!T && !isInfinite!T)
|
||||
{
|
||||
result.insertBack('[');
|
||||
if (!arg.empty)
|
||||
{
|
||||
printToString!"{}"(result, arg.front);
|
||||
arg.popFront();
|
||||
}
|
||||
foreach (e; arg)
|
||||
{
|
||||
result.insertBack(", ");
|
||||
printToString!"{}"(result, e);
|
||||
}
|
||||
result.insertBack(']');
|
||||
}
|
||||
|
||||
private ref String printToString(string fmt, Args...)(return ref String result,
|
||||
auto ref Args args)
|
||||
{
|
||||
@ -761,6 +778,10 @@ private ref String printToString(string fmt, Args...)(return ref String result,
|
||||
{
|
||||
result.insertBack(args[0]);
|
||||
}
|
||||
else static if (isInputRange!Arg && !isInfinite!Arg)
|
||||
{
|
||||
formatRange(args[0], result);
|
||||
}
|
||||
else static if (is(Unqual!(typeof(args[0].stringify())) == String))
|
||||
{
|
||||
result.insertBack(args[0].stringify()[]);
|
||||
@ -969,7 +990,7 @@ package(tanya) String format(string fmt, Args...)(auto ref Args args)
|
||||
{
|
||||
static struct Stringish
|
||||
{
|
||||
string content = "Some content";
|
||||
private string content = "Some content";
|
||||
|
||||
immutable(char) front() const @nogc nothrow pure @safe
|
||||
{
|
||||
@ -987,6 +1008,27 @@ package(tanya) String format(string fmt, Args...)(auto ref Args args)
|
||||
}
|
||||
}
|
||||
assert(format!"{}"(Stringish()) == "Some content");
|
||||
|
||||
static struct Intish
|
||||
{
|
||||
private int front_ = 3;
|
||||
|
||||
int front() const @nogc nothrow pure @safe
|
||||
{
|
||||
return this.front_;
|
||||
}
|
||||
|
||||
void popFront() @nogc nothrow pure @safe
|
||||
{
|
||||
--this.front_;
|
||||
}
|
||||
|
||||
bool empty() const @nogc nothrow pure @safe
|
||||
{
|
||||
return this.front == 0;
|
||||
}
|
||||
}
|
||||
assert(format!"{}"(Intish()) == "[3, 2, 1]");
|
||||
}
|
||||
|
||||
// Typeid.
|
||||
|
Loading…
Reference in New Issue
Block a user