view lphobos/std/stdio.d @ 120:5ce8ab11e75a trunk

[svn r124] Fixed another D vararg + return in ptr bug. Fixed some nested function calls failed to resolve the context ptr.
author lindquist
date Mon, 26 Nov 2007 07:26:21 +0100
parents 61615fa85940
children 5825d48b27d1
line wrap: on
line source

module std.stdio;

import std.traits;

void _writef(T)(T t) {
    static if (is(T == char)) {
        printf("%c", t);
    }
    else static if (is(T : char[])) {
        printf("%.*s", t.length, t.ptr);
    }
    else static if (is(T : long)) {
        printf("%ld", t);
    }
    else static if (is(T : ulong)) {
        printf("%lu", t);
    }
    else static if (is(T : real)) {
        printf("%f", t);
    }
    else static if (is(T : Object)) {
        _writef(t.toString());
    }
    else static if(isArray!(T)) {
        _writef('[');
        if (t.length) {
            _writef(t[0]);
            foreach(v; t[1..$]) {
                _writef(','); _writef(v);
            }
        }
        _writef(']');
    }
    else static assert(0, "Cannot writef:"~T.tostring);
}

void writef(T...)(T t)
{
    foreach(v;t) _writef(v);
}
void writefln(T...)(T t)
{
    writef(t, '\n');
}