view gen/logger.cpp @ 127:facc562f5674 trunk

[svn r131] Fixed #11 All associative array properties now work as they should. Fixed problems with some cases of array.length and array.ptr. Fixed some problems with array properties. Fixed 'in' contracts.
author lindquist
date Fri, 30 Nov 2007 12:56:52 +0100
parents 027b8d8b71ec
children 5825d48b27d1
line wrap: on
line source

#include <cassert>
#include <cstdarg>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

#include "gen/logger.h"

namespace Logger
{
    static std::string indent_str;
    static std::ofstream null_out("/dev/null");

    static bool enabled = false;
    void indent()
    {
        if (enabled) {
            indent_str += "* ";
        }
    }
    void undent()
    {
        if (enabled) {
            assert(!indent_str.empty());
            indent_str.resize(indent_str.size()-2);
        }
    }
    std::ostream& cout()
    {
        if (enabled)
            return std::cout << indent_str;
        else
            return null_out;
    }
    void println(const char* fmt,...)
    {
        if (enabled) {
            printf(indent_str.c_str());
            va_list va;
            va_start(va,fmt);
            vprintf(fmt,va);
            va_end(va);
            printf("\n");
        }
    }
    void print(const char* fmt,...)
    {
        if (enabled) {
            printf(indent_str.c_str());
            va_list va;
            va_start(va,fmt);
            vprintf(fmt,va);
            va_end(va);
        }
    }
    void enable()
    {
        enabled = true;
    }
    void disable()
    {
        enabled = false;
    }
    void attention(const char* fmt,...)
    {
        printf("***ATTENTION*** ");
        va_list va;
        va_start(va,fmt);
        vprintf(fmt,va);
        va_end(va);
        printf("\n");
    }
}