Skip to content

Commit

Permalink
Partially sync some libdxfrw files with library version
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Aug 14, 2021
1 parent fc306ed commit 74b0cfd
Show file tree
Hide file tree
Showing 26 changed files with 1,012 additions and 1,168 deletions.
1 change: 1 addition & 0 deletions external/libdxfrw/CMakeLists.txt
Expand Up @@ -4,6 +4,7 @@ include_directories(SYSTEM
)

add_library(libdxfrw STATIC
drw_base.cpp
drw_classes.cpp
drw_entities.cpp
drw_header.cpp
Expand Down
21 changes: 21 additions & 0 deletions external/libdxfrw/drw_base.cpp
@@ -0,0 +1,21 @@
/******************************************************************************
** 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 <http://www.gnu.org/licenses/>. **
******************************************************************************/

#include "drw_base.h"
#include "intern/drw_dbg.h"

void DRW::setCustomDebugPrinter(DebugPrinter *printer)
{
DRW_dbg::getInstance()->setCustomDebugPrinter(std::unique_ptr<DebugPrinter>(printer));
}

DRW::DebugPrinter::~DebugPrinter() = default;
33 changes: 29 additions & 4 deletions external/libdxfrw/drw_base.h
Expand Up @@ -100,12 +100,37 @@ namespace DRW
BAD_READ_OBJECTS //!< Error in objects read process.
};

enum DBG_LEVEL
{
none,
debug
enum class DebugLevel {
None,
Debug
};

/**
* Interface for debug printers.
*
* The base class is silent and ignores all debugging.
*/
class DebugPrinter {
public:
virtual void printS(const 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;}
DebugPrinter()=default;
virtual ~DebugPrinter();
};

/**
* Sets a custom debug printer to use when outputting debug messages.
*
* Ownership of `printer` is transferred.
*/
void setCustomDebugPrinter( DebugPrinter* printer );

//! Special codes for colors
enum ColorCodes
{
Expand Down
8 changes: 4 additions & 4 deletions external/libdxfrw/drw_header.cpp
Expand Up @@ -77,7 +77,7 @@ void DRW_Header::parseCode( int code, dxfReader *reader )
curr->addString( code, reader->getUtf8String() );
if ( name == "$ACADVER" )
{
reader->setVersion( curr->content.s, true );
reader->setVersion( *curr->content.s, true );
version = reader->getVersion();
}
break;
Expand All @@ -88,7 +88,7 @@ void DRW_Header::parseCode( int code, dxfReader *reader )
curr->addString( code, reader->getUtf8String() );
if ( name == "$DWGCODEPAGE" )
{
reader->setCodePage( curr->content.s );
reader->setCodePage( *curr->content.s );
curr->addString( code, reader->getCodePage() );
}
break;
Expand Down Expand Up @@ -181,7 +181,7 @@ void DRW_Header::write( dxfWriter *writer, DRW::Version ver )
break;
}
writer->writeString( 1, varStr );
writer->setVersion( &varStr, true );
writer->setVersion( varStr, true );

getStr( "$ACADVER", &varStr );
getStr( "$ACADMAINTVER", &varStr );
Expand All @@ -191,7 +191,7 @@ void DRW_Header::write( dxfWriter *writer, DRW::Version ver )
varStr = "ANSI_1252";
}
writer->writeString( 9, "$DWGCODEPAGE" );
writer->setCodePage( &varStr );
writer->setCodePage( varStr );
writer->writeString( 3, writer->getCodePage() );
writer->writeString( 9, "$INSBASE" );
if ( getCoord( "$INSBASE", &varCoord ) )
Expand Down
153 changes: 62 additions & 91 deletions external/libdxfrw/intern/drw_dbg.cpp
Expand Up @@ -21,131 +21,102 @@
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:
class print_debug : public DRW::DebugPrinter {
public:
void printS(const std::string& s) override;
void printI(long long int i) override;
void printUI(long long unsigned int i) override;
void printD(double d) override;
void printH(long long int i) override;
void printB(int i) override;
void printHL(int c, int s, int h) override;
void printPT(double x, double y, double z) override;
~print_debug() override { QgsDebugMsgLevel( mBuf, 5 ); }
private:
std::ios_base::fmtflags flags{std::cerr.flags()};
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::getInstance(){
if (!instance){
instance = new DRW_dbg;
}
return instance;
}

DRW_dbg::DRW_dbg()
{
level = none;
prClass = new print_none;
DRW_dbg::DRW_dbg(){
debugPrinter.reset(new print_debug);
currentPrinter = &silentDebug;
}

void DRW_dbg::setLevel( LEVEL lvl )
void DRW_dbg::setCustomDebugPrinter(std::unique_ptr<DRW::DebugPrinter> printer)
{
level = lvl;
delete prClass;
switch ( level )
{
case debug:
prClass = new print_debug;
break;
default:
prClass = new print_none;
}
debugPrinter = std::move( printer );
if (level == Level::Debug){
currentPrinter = debugPrinter.get();
}
}

DRW_dbg::LEVEL DRW_dbg::getLevel()
{
return level;
void DRW_dbg::setLevel(Level lvl){
level = lvl;
switch (level){
case Level::Debug:
currentPrinter = debugPrinter.get();
break;
case Level::None:
currentPrinter = &silentDebug;
break;
}
}

void DRW_dbg::print( std::string s )
{
prClass->printS( s );
DRW_dbg::Level DRW_dbg::getLevel(){
return level;
}

void DRW_dbg::print( int i )
{
prClass->printI( i );
void DRW_dbg::print(const std::string &s){
currentPrinter->printS(s);
}

void DRW_dbg::print( unsigned int i )
{
prClass->printUI( i );
void DRW_dbg::print(int i){
currentPrinter->printI(i);
}

void DRW_dbg::print( long long int i )
{
prClass->printI( i );
void DRW_dbg::print(unsigned int i){
currentPrinter->printUI(i);
}

void DRW_dbg::print( long unsigned int i )
{
prClass->printUI( i );
void DRW_dbg::print(long long int i){
currentPrinter->printI(i);
}

void DRW_dbg::print( long long unsigned int i )
{
prClass->printUI( i );
void DRW_dbg::print(long unsigned int i){
currentPrinter->printUI(i);
}

void DRW_dbg::print( double d )
{
prClass->printD( d );
void DRW_dbg::print(long long unsigned int i){
currentPrinter->printUI(i);
}

void DRW_dbg::printH( long long int i )
{
prClass->printH( i );
void DRW_dbg::print(double d){
currentPrinter->printD(d);
}

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::printH(long long int i){
currentPrinter->printH(i);
}

void DRW_dbg::printPT( double x, double y, double z )
{
prClass->printPT( x, y, z );
void DRW_dbg::printB(int i){
currentPrinter->printB(i);
}
void DRW_dbg::printHL(int c, int s, int h){
currentPrinter->printHL(c, s, h);
}

print_debug::print_debug() : mTS( &mBuf )
{
void DRW_dbg::printPT(double x, double y, double z){
currentPrinter->printPT(x, y, z);
}

void print_debug::flush()
Expand All @@ -158,7 +129,7 @@ void print_debug::flush()
mBuf = lines.last();
}

void print_debug::printS( std::string s )
void print_debug::printS( const std::string& s )
{
mTS << QString::fromStdString( s );
flush();
Expand Down
57 changes: 31 additions & 26 deletions external/libdxfrw/intern/drw_dbg.h
Expand Up @@ -15,6 +15,9 @@

#include <string>
#include <iostream>
#include <memory>
#include "../drw_base.h"
//#include <iomanip>

#define DRW_DBGSL(a) DRW_dbg::getInstance()->setLevel(a)
#define DRW_DBGGL DRW_dbg::getInstance()->getLevel()
Expand All @@ -24,37 +27,39 @@
#define DRW_DBGHL(a, b, c) DRW_dbg::getInstance()->printHL(a, b ,c)
#define DRW_DBGPT(a, b, c) DRW_dbg::getInstance()->printPT(a, b, c)


class print_none;

class DRW_dbg
{
public:
enum LEVEL
{
none,
debug
class DRW_dbg {
public:
enum class Level {
None,
Debug
};
void setLevel( LEVEL lvl );
LEVEL getLevel();
void setLevel(Level lvl);
/**
* Sets a custom debug printer to use when non-silent output
* is required.
*/
void setCustomDebugPrinter(std::unique_ptr<DRW::DebugPrinter> printer);
Level getLevel();
static DRW_dbg *getInstance();
void print( std::string s );
void print( int i );
void print( unsigned int i );
void print( long long int i );
void print( long unsigned int i );
void print( long long unsigned int i );
void print( double d );
void printH( long long int i );
void printB( int i );
void printHL( int c, int s, int h );
void printPT( double x, double y, double z );
void print(const std::string& s);
void print(int i);
void print(unsigned int i);
void print(long long int i);
void print(long unsigned int i);
void print(long long unsigned int i);
void print(double d);
void printH(long long int i);
void printB(int i);
void printHL(int c, int s, int h);
void printPT(double x, double y, double z);

private:
private:
DRW_dbg();
static DRW_dbg *instance;
LEVEL level;
print_none *prClass = nullptr;
Level level{Level::None};
DRW::DebugPrinter silentDebug;
std::unique_ptr< DRW::DebugPrinter > debugPrinter;
DRW::DebugPrinter* currentPrinter{nullptr};
};


Expand Down

0 comments on commit 74b0cfd

Please sign in to comment.