2 * Copyright (c) 2002, Robert Collins..
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * A copy of the GNU General Public License can be found at
12 * Written by Robert Collins <rbtcollins@hotmail.com>
16 #include "LogSingleton.h"
20 /* Helper functions */
22 /* End of a Log comment */
23 std::ostream
& endLog(std::ostream
& outs
)
25 /* Doesn't seem to be any way around this */
26 dynamic_cast<LogSingleton
&>(outs
).endEntry();
30 /* The LogSingleton class */
32 LogSingleton
* LogSingleton::theInstance(0);
34 LogSingleton::LogSingleton(std::streambuf
* aStream
) : std::ios (aStream
), std::ostream (aStream
)
36 std::ios::init (aStream
);
38 LogSingleton::~LogSingleton(){}
41 LogSingleton::GetInstance()
44 throw new std::invalid_argument ("No instance has been set!");
49 LogSingleton::SetInstance(LogSingleton
&newInstance
)
51 theInstance
= &newInstance
;
54 // Log adapators for printf-style output
56 LogBabblePrintf(const char *fmt
, ...)
62 len
= vsnprintf (buf
, 8192, fmt
, args
);
63 if ((len
> 0) && (buf
[len
-1] == '\n'))
65 Log (LOG_BABBLE
) << buf
<< endLog
;
69 LogPlainPrintf(const char *fmt
, ...)
75 len
= vsnprintf (buf
, 8192, fmt
, args
);
76 if ((len
> 0) && (buf
[len
-1] == '\n'))
78 Log (LOG_PLAIN
) << buf
<< endLog
;