mirror of
https://github.com/taglib/taglib.git
synced 2025-05-27 21:20:26 -04:00
Enabled users to define custom debug message listeners
This commit is contained in:
parent
98d010f460
commit
e18546560e
@ -51,6 +51,7 @@ set(tag_HDRS
|
||||
toolkit/tmap.tcc
|
||||
toolkit/tpropertymap.h
|
||||
toolkit/trefcounter.h
|
||||
toolkit/tdebuglistener.h
|
||||
mpeg/mpegfile.h
|
||||
mpeg/mpegproperties.h
|
||||
mpeg/mpegheader.h
|
||||
@ -291,6 +292,7 @@ set(toolkit_SRCS
|
||||
toolkit/tdebug.cpp
|
||||
toolkit/tpropertymap.cpp
|
||||
toolkit/trefcounter.cpp
|
||||
toolkit/tdebuglistener.cpp
|
||||
toolkit/unicode.cpp
|
||||
)
|
||||
|
||||
|
@ -23,33 +23,13 @@
|
||||
* http://www.mozilla.org/MPL/ *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef NDEBUG
|
||||
#include <iostream>
|
||||
#include <bitset>
|
||||
|
||||
#include "tdebug.h"
|
||||
#include "tstring.h"
|
||||
#include "tdebuglistener.h"
|
||||
|
||||
using namespace TagLib;
|
||||
|
||||
void TagLib::debug(const String &s)
|
||||
{
|
||||
std::cerr << "TagLib: " << s << std::endl;
|
||||
getDebugListener()->listen(s);
|
||||
}
|
||||
|
||||
void TagLib::debugData(const ByteVector &v)
|
||||
{
|
||||
for(uint i = 0; i < v.size(); i++) {
|
||||
|
||||
std::cout << "*** [" << i << "] - '" << char(v[i]) << "' - int " << int(v[i])
|
||||
<< std::endl;
|
||||
|
||||
std::bitset<8> b(v[i]);
|
||||
|
||||
for(int j = 0; j < 8; j++)
|
||||
std::cout << i << ":" << j << " " << b.test(j) << std::endl;
|
||||
|
||||
std::cout << std::endl;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -29,14 +29,13 @@
|
||||
namespace TagLib {
|
||||
|
||||
class String;
|
||||
class ByteVector;
|
||||
|
||||
#ifndef DO_NOT_DOCUMENT
|
||||
#ifndef NDEBUG
|
||||
|
||||
/*!
|
||||
* A simple function that prints debugging output to cerr if debugging is
|
||||
* not disabled.
|
||||
* A simple function that outputs the debug messages to the listener.
|
||||
* The default listener redirects the messages to \a stderr when NDEBUG is
|
||||
* not defined.
|
||||
*
|
||||
* \warning Do not use this outside of TagLib, it could lead to undefined
|
||||
* symbols in your build if TagLib is built with NDEBUG defined and your
|
||||
@ -45,27 +44,7 @@ namespace TagLib {
|
||||
* \internal
|
||||
*/
|
||||
void debug(const String &s);
|
||||
|
||||
/*!
|
||||
* For debugging binary data.
|
||||
*
|
||||
* \warning Do not use this outside of TagLib, it could lead to undefined
|
||||
* symbols in your build if TagLib is built with NDEBUG defined and your
|
||||
* application is not.
|
||||
*
|
||||
* \internal
|
||||
*/
|
||||
void debugData(const ByteVector &v);
|
||||
|
||||
#else
|
||||
|
||||
// Define these to an empty statement if debugging is disabled.
|
||||
|
||||
#define debug(x)
|
||||
#define debugData(x)
|
||||
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
81
taglib/toolkit/tdebuglistener.cpp
Normal file
81
taglib/toolkit/tdebuglistener.cpp
Normal file
@ -0,0 +1,81 @@
|
||||
/***************************************************************************
|
||||
copyright : (C) 2013 by Tsuda Kageyu
|
||||
email : tsuda.kageyu@gmail.com
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* This library is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License version *
|
||||
* 2.1 as published by the Free Software Foundation. *
|
||||
* *
|
||||
* 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 Street, Fifth Floor, Boston, MA *
|
||||
* 02110-1301 USA *
|
||||
* *
|
||||
* Alternatively, this file is available under the Mozilla Public *
|
||||
* License Version 1.1. You may obtain a copy of the License at *
|
||||
* http://www.mozilla.org/MPL/ *
|
||||
***************************************************************************/
|
||||
|
||||
#include "tdebuglistener.h"
|
||||
|
||||
#ifndef NDEBUG
|
||||
# include <iostream>
|
||||
# ifdef _WIN32
|
||||
# include <windows.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
using namespace TagLib;
|
||||
|
||||
namespace
|
||||
{
|
||||
class DefaultListener : public DebugListener
|
||||
{
|
||||
public:
|
||||
virtual void listen(const String &msg)
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
# ifdef _WIN32
|
||||
|
||||
std::string s;
|
||||
const wstring wstr = msg.toWString();
|
||||
const int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, NULL, 0, NULL, NULL);
|
||||
if(len != 0) {
|
||||
s.resize(len);
|
||||
WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, &s[0], len, NULL, NULL);
|
||||
}
|
||||
|
||||
std::cerr << "TagLib: " << s << std::endl;
|
||||
|
||||
# else
|
||||
|
||||
std::cerr << "TagLib: " << msg << std::endl;
|
||||
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
DefaultListener defaultListener;
|
||||
DebugListener *traceListener = &defaultListener;
|
||||
}
|
||||
|
||||
void TagLib::setDebugListener(DebugListener *listener)
|
||||
{
|
||||
if(listener)
|
||||
traceListener = listener;
|
||||
else
|
||||
traceListener = &defaultListener;
|
||||
}
|
||||
|
||||
DebugListener *TagLib::getDebugListener()
|
||||
{
|
||||
return traceListener;
|
||||
}
|
71
taglib/toolkit/tdebuglistener.h
Normal file
71
taglib/toolkit/tdebuglistener.h
Normal file
@ -0,0 +1,71 @@
|
||||
/***************************************************************************
|
||||
copyright : (C) 2013 by Tsuda Kageyu
|
||||
email : tsuda.kageyu@gmail.com
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* This library is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU Lesser General Public License version *
|
||||
* 2.1 as published by the Free Software Foundation. *
|
||||
* *
|
||||
* 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 Street, Fifth Floor, Boston, MA *
|
||||
* 02110-1301 USA *
|
||||
* *
|
||||
* Alternatively, this file is available under the Mozilla Public *
|
||||
* License Version 1.1. You may obtain a copy of the License at *
|
||||
* http://www.mozilla.org/MPL/ *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef TAGLIB_DEBUGLISTENER_H
|
||||
#define TAGLIB_DEBUGLISTENER_H
|
||||
|
||||
#include "taglib_export.h"
|
||||
#include "tstring.h"
|
||||
|
||||
namespace TagLib
|
||||
{
|
||||
//! An abstraction for the listener to the debug messages.
|
||||
|
||||
/*!
|
||||
* This class enables you to handle the debug messages in your preferred
|
||||
* way by subclassing this class, reimplementing listen() and setting your
|
||||
* reimplementation as the default with setDebugListener().
|
||||
*
|
||||
* \see setDebugListener()
|
||||
*/
|
||||
class TAGLIB_EXPORT DebugListener
|
||||
{
|
||||
public:
|
||||
virtual void listen(const String &msg) = 0;
|
||||
};
|
||||
|
||||
/*!
|
||||
* Sets the listener that decides how the debug messages are redirected.
|
||||
* If the parameter \a listener is null, the previous listener is released
|
||||
* and default stderr listener is restored.
|
||||
*
|
||||
* \note The caller is responsible for deleting the previous listener
|
||||
* as needed after it is released.
|
||||
*
|
||||
* \see DebugListener
|
||||
*/
|
||||
void setDebugListener(DebugListener *listener);
|
||||
|
||||
#ifndef DO_NOT_DOCUMENT
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
*/
|
||||
DebugListener *getDebugListener();
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user