/**
* This file is part of TelepathyQt
*
* @copyright Copyright (C) 2008 Collabora Ltd.
* @copyright Copyright (C) 2008 Nokia Corporation
* @license LGPL 2.1
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef _TelepathyQt_debug_HEADER_GUARD_
#define _TelepathyQt_debug_HEADER_GUARD_
#include
#include
namespace Tp
{
class TP_QT_EXPORT Debug
{
public:
inline Debug() : debug(0) { }
inline Debug(QtMsgType type) : type(type), debug(new QDebug(&msg)) { }
inline Debug(const Debug &a) : type(a.type), debug(a.debug ? new QDebug(&msg) : 0)
{
if (debug) {
(*debug) << qPrintable(a.msg);
}
}
inline Debug &operator=(const Debug &a)
{
if (this != &a) {
type = a.type;
delete debug;
debug = 0;
if (a.debug) {
debug = new QDebug(&msg);
(*debug) << qPrintable(a.msg);
}
}
return *this;
}
inline ~Debug()
{
if (!msg.isEmpty()) {
invokeDebugCallback();
}
delete debug;
}
inline Debug &space()
{
if (debug) {
debug->space();
}
return *this;
}
inline Debug &nospace()
{
if (debug) {
debug->nospace();
}
return *this;
}
inline Debug &maybeSpace()
{
if (debug) {
debug->maybeSpace();
}
return *this;
}
template
inline Debug &operator<<(T a)
{
if (debug) {
(*debug) << a;
}
return *this;
}
private:
QString msg;
QtMsgType type;
QDebug *debug;
void invokeDebugCallback();
};
// The telepathy-farsight Qt 4 binding links to these - they're not API outside
// this source tarball, but they *are* ABI
TP_QT_EXPORT Debug enabledDebug();
TP_QT_EXPORT Debug enabledWarning();
#ifdef ENABLE_DEBUG
inline Debug debug()
{
return enabledDebug();
}
inline Debug warning()
{
return enabledWarning();
}
#else /* #ifdef ENABLE_DEBUG */
struct NoDebug
{
template
NoDebug& operator<<(const T&)
{
return *this;
}
NoDebug& space()
{
return *this;
}
NoDebug& nospace()
{
return *this;
}
NoDebug& maybeSpace()
{
return *this;
}
};
inline NoDebug debug()
{
return NoDebug();
}
inline NoDebug warning()
{
return NoDebug();
}
#endif /* #ifdef ENABLE_DEBUG */
} // Tp
#endif