/****************************************************************************** ** libDXFrw - Library to read/write DXF files (ascii & binary) ** ** ** ** Copyright (C) 2011-2015 José F. Soriano, rallazz@gmail.com ** ** ** ** This library is free software, licensed under the terms of the GNU ** ** General Public License as published by the Free Software Foundation, ** ** either version 2 of the License, or (at your option) any later version. ** ** You should have received a copy of the GNU General Public License ** ** along with this program. If not, see . ** ******************************************************************************/ #include "drw_dbg.h" #include "qgslogger.h" #include #include DRW_dbg *DRW_dbg::instance = nullptr; /*********private classes*************/ class print_none { public: virtual void printS( std::string s ) {( void )s;} virtual void printI( long long int i ) {( void )i;} virtual void printUI( long long unsigned int i ) {( void )i;} virtual void printD( double d ) {( void )d;} virtual void printH( long long int i ) {( void )i;} virtual void printB( int i ) {( void )i;} virtual void printHL( int c, int s, int h ) {( void )c; ( void )s; ( void )h;} virtual void printPT( double x, double y, double z ) {( void )x; ( void )y; ( void )z;} print_none() {} virtual ~print_none() = default; }; class print_debug : public print_none { public: virtual void printS( std::string s ); virtual void printI( long long int i ); virtual void printUI( long long unsigned int i ); virtual void printD( double d ); virtual void printH( long long int i ); virtual void printB( int i ); virtual void printHL( int c, int s, int h ); virtual void printPT( double x, double y, double z ); print_debug(); virtual ~print_debug() { QgsDebugMsgLevel( mBuf, 5 ); } private: QString mBuf; QTextStream mTS; void flush(); }; /********* debug class *************/ DRW_dbg *DRW_dbg::getInstance() { if ( !instance ) { instance = new DRW_dbg; } return instance; } DRW_dbg::DRW_dbg() { level = NONE; prClass = new print_none; } void DRW_dbg::setLevel( LEVEL lvl ) { level = lvl; delete prClass; switch ( level ) { case DEBUG: prClass = new print_debug; break; default: prClass = new print_none; } } DRW_dbg::LEVEL DRW_dbg::getLevel() { return level; } void DRW_dbg::print( std::string s ) { prClass->printS( s ); } void DRW_dbg::print( int i ) { prClass->printI( i ); } void DRW_dbg::print( unsigned int i ) { prClass->printUI( i ); } void DRW_dbg::print( long long int i ) { prClass->printI( i ); } void DRW_dbg::print( long unsigned int i ) { prClass->printUI( i ); } void DRW_dbg::print( long long unsigned int i ) { prClass->printUI( i ); } void DRW_dbg::print( double d ) { prClass->printD( d ); } void DRW_dbg::printH( long long int i ) { prClass->printH( i ); } void DRW_dbg::printB( int i ) { prClass->printB( i ); } void DRW_dbg::printHL( int c, int s, int h ) { prClass->printHL( c, s, h ); } void DRW_dbg::printPT( double x, double y, double z ) { prClass->printPT( x, y, z ); } print_debug::print_debug() : mTS( &mBuf ) { } void print_debug::flush() { QStringList lines = mBuf.split( '\n' ); for ( int i = 0; i < lines.size() - 1; i++ ) { QgsDebugMsgLevel( lines[i], 4 ); } mBuf = lines.last(); } void print_debug::printS( std::string s ) { mTS << QString::fromStdString( s ); flush(); } void print_debug::printI( long long int i ) { mTS << i; flush(); } void print_debug::printUI( long long unsigned int i ) { mTS << i; flush(); } void print_debug::printD( double d ) { mTS << QStringLiteral( "%1 " ).arg( d, 0, 'g' ); flush(); } void print_debug::printH( long long i ) { mTS << QStringLiteral( "0x%1" ).arg( i, 0, 16 ); flush(); } void print_debug::printB( int i ) { mTS << QStringLiteral( "0%1" ).arg( i, 0, 8 ); flush(); } void print_debug::printHL( int c, int s, int h ) { mTS << QStringLiteral( "%1.%2 0x%3" ).arg( c ).arg( s ).arg( h, 0, 16 ); flush(); } void print_debug::printPT( double x, double y, double z ) { mTS << QStringLiteral( "x:%1 y:%2 z:%3" ).arg( x, 0, 'g' ).arg( y, 0, 'g' ).arg( z, 0, 'g' ); flush(); }