From 642fbe815d55fd9bade7ab4f986dc2db573279f8 Mon Sep 17 00:00:00 2001 From: Roman Telezhynskyi Date: Tue, 23 Nov 2021 11:15:11 +0200 Subject: [PATCH] Use ununordered_map instead of map Should result in a performance boost when reading large files. --- src/libs/vdxf/dxiface.cpp | 2 +- src/libs/vdxf/libdxfrw/drw_header.cpp | 15 +++++---------- src/libs/vdxf/libdxfrw/drw_header.h | 10 ++++++---- src/libs/vdxf/libdxfrw/libdxfrw.cpp | 5 ++--- src/libs/vdxf/libdxfrw/libdxfrw.h | 3 ++- 5 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/libs/vdxf/dxiface.cpp b/src/libs/vdxf/dxiface.cpp index 64b47e1c6..ee4acf3b2 100644 --- a/src/libs/vdxf/dxiface.cpp +++ b/src/libs/vdxf/dxiface.cpp @@ -119,7 +119,7 @@ void dx_iface::writeHeader(DRW_Header &data){ //complete copy of header vars: data = cData.headerC; //or copy one by one: - // for (std::map::iterator it=cData->headerC.vars.begin(); it != cData->headerC.vars.end(); ++it) + // for (auto it=cData->headerC.vars.begin(); it != cData->headerC.vars.end(); ++it) // data.vars[it->first] = new DRW_Variant( *(it->second) ); } diff --git a/src/libs/vdxf/libdxfrw/drw_header.cpp b/src/libs/vdxf/libdxfrw/drw_header.cpp index 82caba0b5..8feafd126 100644 --- a/src/libs/vdxf/libdxfrw/drw_header.cpp +++ b/src/libs/vdxf/libdxfrw/drw_header.cpp @@ -1662,8 +1662,7 @@ void DRW_Header::write(dxfWriter *writer, DRW::Version ver){ } #ifdef DRW_DBG - std::map::const_iterator it; - for ( it=vars.begin() ; it != vars.end(); ++it ){ + for ( auto it=vars.begin() ; it != vars.end(); ++it ){ DRW_DBG((*it).first); DRW_DBG("\n"); } #endif @@ -1703,8 +1702,7 @@ void DRW_Header::addCoord(std::string key, DRW_Coord value, int code){ bool DRW_Header::getDouble(std::string key, double *varDouble){ bool result = false; - std::map::iterator it; - it=vars.find( key); + auto it=vars.find( key); if (it != vars.end()) { DRW_Variant *var = (*it).second; if (var->type == DRW_Variant::DOUBLE) { @@ -1719,8 +1717,7 @@ bool DRW_Header::getDouble(std::string key, double *varDouble){ bool DRW_Header::getInt(std::string key, int *varInt){ bool result = false; - std::map::iterator it; - it=vars.find( key); + auto it=vars.find( key); if (it != vars.end()) { DRW_Variant *var = (*it).second; if (var->type == DRW_Variant::INTEGER) { @@ -1735,8 +1732,7 @@ bool DRW_Header::getInt(std::string key, int *varInt){ bool DRW_Header::getStr(std::string key, std::string *varStr){ bool result = false; - std::map::iterator it; - it=vars.find( key); + auto it=vars.find( key); if (it != vars.end()) { DRW_Variant *var = (*it).second; if (var->type == DRW_Variant::STRING) { @@ -1751,8 +1747,7 @@ bool DRW_Header::getStr(std::string key, std::string *varStr){ bool DRW_Header::getCoord(std::string key, DRW_Coord *varCoord){ bool result = false; - std::map::iterator it; - it=vars.find( key); + auto it=vars.find( key); if (it != vars.end()) { DRW_Variant *var = (*it).second; if (var->type == DRW_Variant::COORD) { diff --git a/src/libs/vdxf/libdxfrw/drw_header.h b/src/libs/vdxf/libdxfrw/drw_header.h index 0950f8483..11dd4f33e 100644 --- a/src/libs/vdxf/libdxfrw/drw_header.h +++ b/src/libs/vdxf/libdxfrw/drw_header.h @@ -55,7 +55,7 @@ public: vportCtrl(), vpEntHeaderCtrl() { - for (std::map::const_iterator it=h.vars.begin(); it!=h.vars.end(); ++it) + for (auto it=h.vars.begin(); it!=h.vars.end(); ++it) { this->vars[it->first] = new DRW_Variant( *(it->second) ); } @@ -67,7 +67,7 @@ public: clearVars(); this->version = h.version; this->comments = h.comments; - for (std::map::const_iterator it=h.vars.begin(); it!=h.vars.end(); ++it) + for (auto it=h.vars.begin(); it!=h.vars.end(); ++it) { this->vars[it->first] = new DRW_Variant( *(it->second) ); } @@ -92,14 +92,16 @@ private: bool getCoord(std::string key, DRW_Coord *varCoord); void clearVars() { - for (std::map::iterator it=vars.begin(); it!=vars.end(); ++it) + for (auto it=vars.begin(); it!=vars.end(); ++it) + { delete it->second; + } vars.clear(); } public: - std::map vars; + std::unordered_map vars; private: std::string comments; std::string name; diff --git a/src/libs/vdxf/libdxfrw/libdxfrw.cpp b/src/libs/vdxf/libdxfrw/libdxfrw.cpp index 84caebfd1..f1a9ec27a 100644 --- a/src/libs/vdxf/libdxfrw/libdxfrw.cpp +++ b/src/libs/vdxf/libdxfrw/libdxfrw.cpp @@ -1761,8 +1761,7 @@ bool dxfRW::writeObjects() { //write IMAGEDEF_REACTOR for (unsigned int i=0; i::iterator it; - for ( it=id->reactors.begin() ; it != id->reactors.end(); ++it ) { + for (auto it=id->reactors.begin() ; it != id->reactors.end(); ++it ) { writer->writeString(0, "IMAGEDEF_REACTOR"); writer->writeString(5, (*it).first); writer->writeString(330, (*it).second); @@ -1795,7 +1794,7 @@ bool dxfRW::writeObjects() { } writer->writeString(102, "{ACAD_REACTORS"); std::map::iterator it; - for ( it=id->reactors.begin() ; it != id->reactors.end(); ++it ) { + for (auto it=id->reactors.begin() ; it != id->reactors.end(); ++it ) { writer->writeString(330, (*it).first); } writer->writeString(102, "}"); diff --git a/src/libs/vdxf/libdxfrw/libdxfrw.h b/src/libs/vdxf/libdxfrw/libdxfrw.h index c866b0a6a..35db5cab3 100644 --- a/src/libs/vdxf/libdxfrw/libdxfrw.h +++ b/src/libs/vdxf/libdxfrw/libdxfrw.h @@ -14,6 +14,7 @@ #define LIBDXFRW_H #include +#include #include "drw_entities.h" #include "drw_objects.h" #include "drw_header.h" @@ -141,7 +142,7 @@ private: bool applyExt; bool writingBlock; int elParts; /*!< parts munber when convert ellipse to polyline */ - std::map blockMap; + std::unordered_map blockMap; std::vector imageDef; /*!< imageDef list */ int currHandle;