view lphobos/std/stdio.d @ 94:61615fa85940 trunk

[svn r98] Added support for std.c.stdlib.alloca via pragma(LLVM_internal, "alloca"). Added support for array .sort and .reverse properties. Fixed some bugs with pointer arithmetic. Disabled some DMD AST optimizations that was messing things up, destroying valuable information. Added a KDevelop project file, this is what I use for coding LLVMDC now :) Other minor stuff.
author lindquist
date Mon, 12 Nov 2007 06:32:46 +0100
parents 2c3cd3596187
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');
}