Removed special treatment of <<(const char*)
[quassel.git] / src / common / logger.h
index 708801a..113fc56 100644 (file)
@@ -36,50 +36,38 @@ class Logger {
       ErrorLevel
     };
 
-    inline Logger(LogLevel level) : _stream(new Stream(level)) {}
+    inline Logger(LogLevel level) : _stream(&_buffer, QIODevice::WriteOnly), _logLevel(level) {}
     ~Logger();
 
-    inline Logger &operator<<(const char* t) { _stream->internalStream << QString::fromAscii(t); return *this; }
-    inline Logger &operator<<(QChar t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(bool t) { _stream->internalStream << (t ? "true" : "false"); return *this; }
-    inline Logger &operator<<(char t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(signed short t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(unsigned short t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(signed int t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(unsigned int t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(signed long t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(unsigned long t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(qint64 t) { _stream->internalStream << QString::number(t); return *this; }
-    inline Logger &operator<<(quint64 t) { _stream->internalStream << QString::number(t); return *this; }
-    inline Logger &operator<<(float t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(double t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(const QString & t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(const QLatin1String &t) { _stream->internalStream << t.latin1(); return *this; }
-    inline Logger &operator<<(const QByteArray & t) { _stream->internalStream << t ; return *this; }
-    inline Logger &operator<<(const void * t) { _stream->internalStream << t; return *this; }
-    inline Logger &operator<<(const QStringList & t) { _stream->internalStream << t.join(" "); return *this; }
-    inline Logger &operator<<(const BufferId & t) { _stream->internalStream << QVariant::fromValue(t).toInt(); return *this; }
-    inline Logger &operator<<(const NetworkId & t) { _stream->internalStream << QVariant::fromValue(t).toInt(); return *this; }
-    inline Logger &operator<<(const UserId & t) { _stream->internalStream << QVariant::fromValue(t).toInt(); return *this; }
-    inline Logger &operator<<(const MsgId & t) { _stream->internalStream << QVariant::fromValue(t).toInt(); return *this; }
-    inline Logger &operator<<(const IdentityId & t) { _stream->internalStream << QVariant::fromValue(t).toInt(); return *this; }
-    inline Logger &operator<<(const AccountId & t) { _stream->internalStream << QVariant::fromValue(t).toInt(); return *this; }
+    template<typename T>
+    inline Logger &operator<<(const T &value) { _stream << value; return *this; }
+    inline Logger &operator<<(const QStringList & t) { _stream << t.join(" "); return *this; }
+    inline Logger &operator<<(bool t) { _stream << (t ? "true" : "false"); return *this; }
 
-    void log();
   private:
-    struct Stream {
-      Stream(LogLevel level)
-      : internalStream(&buffer, QIODevice::WriteOnly),
-        logLevel(level) {}
-      QTextStream internalStream;
-      QString buffer;
-      LogLevel logLevel;
-    } *_stream;
+    void log();
+    QTextStream _stream;
+    QString _buffer;
+    LogLevel _logLevel;
+};
+
+class quDebug : public Logger {
+  public:
+    inline quDebug() : Logger(Logger::DebugLevel) {}
+};
+
+class quInfo : public Logger {
+  public:
+    inline quInfo() : Logger(Logger::InfoLevel) {}
 };
 
-inline Logger quDebug() { return Logger(Logger::DebugLevel); }
-inline Logger quInfo() { return Logger(Logger::InfoLevel); }
-inline Logger quWarning() { return Logger(Logger::WarningLevel); }
-inline Logger quError() { return Logger(Logger::ErrorLevel); }
+class quWarning : public Logger {
+  public:
+    inline quWarning() : Logger(Logger::WarningLevel) {}
+};
 
+class quError : public Logger {
+  public:
+    inline quError() : Logger(Logger::ErrorLevel) {}
+};
 #endif