Subversion Repositories spk

Rev

Rev 9 | Rev 50 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#pragma once

#include "../Utils/StringList.h"
#include <vector>
#include <stdarg.h>


typedef struct {
        Utils::String   sText;
        int                             iLevel;
} SLog;

class SPKEXPORT CLog
{
public:
        typedef CLinkList<SLog> LogList;
        typedef CListNode<SLog>* LogNode;

        enum LogLevel {
                Log_All                 = 0,
                Log_Normal              = 1,
                Log_IO                  = 2,
                Log_EditPackage = 4,
                Log_File                = 8,
                Log_Read                = 16,
        };

protected:
        // private constructor
        CLog(void);
        virtual ~CLog(void);

private:
        LogList m_lLogs;

public:
        static CLog *m_pInstance;
        static CLog *create();
        static void release();

        static void log(int iLevel, const Utils::String &sLogText);
        static void logf(int iLevel, const char *sLogText, ...);
        void _log(int iLevel, const Utils::String &sLogText);
        void _logf(int iLevel, const char *sLogText, ...);

        virtual void displayLog(int iLevel, const Utils::String &sLogText) const;

        void clear();
        const SLog *firstLog() const;
        int count() const;
};

//TODO: move this
class SPKEXPORT CConsoleLog : public CLog 
{
public:
        static CLog *create()
        {
                if ( !CLog::m_pInstance ) {
                        CLog::m_pInstance = new CConsoleLog();
                }
                return CLog::m_pInstance;
        }

        virtual ~CConsoleLog(void)
        {
        }
        virtual void displayLog(int iLevel, const Utils::String &sLogText) const
        {
                printf("%s\n", sLogText.c_str());
        }
};