Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
…unordered_map into master
  • Loading branch information
lordofbikes committed Aug 14, 2021
2 parents f1d7740 + 77e6e93 commit c16a531
Show file tree
Hide file tree
Showing 15 changed files with 92 additions and 100 deletions.
2 changes: 1 addition & 1 deletion dwg2dxf/dx_iface.h
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ class dx_iface : public DRW_Interface {
//complete copy of header vars:
data = cData->headerC;
//or copy one by one:
// for (std::map<std::string,DRW_Variant*>::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) );
}

Expand Down
17 changes: 6 additions & 11 deletions src/drw_header.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1661,8 +1661,7 @@ void DRW_Header::write(dxfWriter *writer, DRW::Version ver){
}

#ifdef DRW_DBG
std::map<std::string,DRW_Variant *>::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
Expand Down Expand Up @@ -1690,8 +1689,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<std::string,DRW_Variant *>::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) {
Expand All @@ -1706,8 +1704,7 @@ bool DRW_Header::getDouble(std::string key, double *varDouble){

bool DRW_Header::getInt(std::string key, int *varInt){
bool result = false;
std::map<std::string,DRW_Variant *>::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) {
Expand All @@ -1722,8 +1719,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<std::string,DRW_Variant *>::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) {
Expand All @@ -1738,8 +1734,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<std::string,DRW_Variant *>::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) {
Expand Down Expand Up @@ -2363,7 +2358,7 @@ bool DRW_Header::parseDwg(DRW::Version version, dwgBuffer *buf, dwgBuffer *hBbuf
DRW_DBG(" string buf bit position: "); DRW_DBG(buf->getBitPos());

if (DRW_DBGGL == DRW_dbg::DEBUG){
for (std::map<std::string,DRW_Variant*>::iterator it=vars.begin(); it!=vars.end(); ++it){
for (auto it=vars.begin(); it!=vars.end(); ++it){
DRW_DBG("\n"); DRW_DBG(it->first); DRW_DBG(": ");
switch (it->second->type()){
case DRW_Variant::INTEGER:
Expand Down
14 changes: 7 additions & 7 deletions src/drw_header.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#define DRW_HEADER_H


#include <map>
#include <unordered_map>
#include "drw_base.h"

class dxfReader;
Expand All @@ -26,8 +26,8 @@ class dwgBuffer;

//! Class to handle header entries
/*!
* Class to handle header vars, to read iterate over "std::map vars"
* to write add a DRW_Variant* into "std::map vars" (do not delete it, are cleared in dtor)
* Class to handle header vars, to read iterate over "std::unordered_map vars"
* to write add a DRW_Variant* into "std::unordered_map vars" (do not delete it, are cleared in dtor)
* or use add* helper functions.
* @author Rallaz
*/
Expand All @@ -42,7 +42,7 @@ class DRW_Header {
DRW_Header(const DRW_Header& h){
this->version = h.version;
this->comments = h.comments;
for (std::map<std::string,DRW_Variant*>::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) );
}
this->curr = NULL;
Expand All @@ -52,7 +52,7 @@ class DRW_Header {
clearVars();
this->version = h.version;
this->comments = h.comments;
for (std::map<std::string,DRW_Variant*>::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) );
}
}
Expand All @@ -76,14 +76,14 @@ class DRW_Header {
bool getStr(std::string key, std::string *varStr);
bool getCoord(std::string key, DRW_Coord *varStr);
void clearVars(){
for (std::map<std::string,DRW_Variant*>::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<std::string,DRW_Variant*> vars;
std::unordered_map<std::string,DRW_Variant*> vars;
private:
std::string comments;
std::string name;
Expand Down
4 changes: 2 additions & 2 deletions src/intern/dwgbuffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -832,14 +832,14 @@ duint16 dwgBuffer::getBERawShort16(){
}

/* reads "size" bytes and stores in "buf" return false if fail */
bool dwgBuffer::getBytes(unsigned char *buf, int size){
bool dwgBuffer::getBytes(unsigned char *buf, duint64 size){
duint8 tmp;
filestr->read (buf,size);
if (!filestr->good())
return false;

if (bitPos != 0){
for (int i=0; i<size;i++){
for (duint64 i=0; i<size;i++){
tmp = buf[i];
buf[i] = (currByte << bitPos) | (tmp >> (8 - bitPos));
currByte = tmp;
Expand Down
2 changes: 1 addition & 1 deletion src/intern/dwgbuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ class dwgBuffer {
duint16 getBERawShort16(); //RS big-endian order

bool isGood() const {return filestr->good();}
bool getBytes(duint8 *buf, int size);
bool getBytes(duint8 *buf, duint64 size);
int numRemainingBytes() const {return (maxSize- filestr->getPos());}

duint16 crc8(duint16 dx,dint32 start,dint32 end);
Expand Down
67 changes: 32 additions & 35 deletions src/intern/dwgreader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,35 +20,35 @@
#include "drw_dbg.h"

dwgReader::~dwgReader(){
for (std::map<duint32, DRW_LType*>::iterator it=ltypemap.begin(); it!=ltypemap.end(); ++it)
for (auto it=ltypemap.begin(); it!=ltypemap.end(); ++it)
delete(it->second);
for (std::map<duint32, DRW_Layer*>::iterator it=layermap.begin(); it!=layermap.end(); ++it)
for (auto it=layermap.begin(); it!=layermap.end(); ++it)
delete(it->second);
for (std::map<duint32, DRW_Block*>::iterator it=blockmap.begin(); it!=blockmap.end(); ++it)
for (auto it=blockmap.begin(); it!=blockmap.end(); ++it)
delete(it->second);
for (std::map<duint32, DRW_Textstyle*>::iterator it=stylemap.begin(); it!=stylemap.end(); ++it)
for (auto it=stylemap.begin(); it!=stylemap.end(); ++it)
delete(it->second);
for (std::map<duint32, DRW_Dimstyle*>::iterator it=dimstylemap.begin(); it!=dimstylemap.end(); ++it)
for (auto it=dimstylemap.begin(); it!=dimstylemap.end(); ++it)
delete(it->second);
for (std::map<duint32, DRW_Vport*>::iterator it=vportmap.begin(); it!=vportmap.end(); ++it)
for (auto it=vportmap.begin(); it!=vportmap.end(); ++it)
delete(it->second);
for (std::map<duint32, DRW_Class*>::iterator it=classesmap.begin(); it!=classesmap.end(); ++it)
for (auto it=classesmap.begin(); it!=classesmap.end(); ++it)
delete(it->second);
for (std::map<duint32, DRW_Block_Record*>::iterator it=blockRecordmap.begin(); it!=blockRecordmap.end(); ++it)
for (auto it=blockRecordmap.begin(); it!=blockRecordmap.end(); ++it)
delete(it->second);
for (std::map<duint32, DRW_AppId*>::iterator it=appIdmap.begin(); it!=appIdmap.end(); ++it)
for (auto it=appIdmap.begin(); it!=appIdmap.end(); ++it)
delete(it->second);
}

void dwgReader::parseAttribs(DRW_Entity* e){
if (e){
duint32 ltref =e->lTypeH.ref;
duint32 lyref =e->layerH.ref;
std::map<duint32, DRW_LType*>::iterator lt_it = ltypemap.find(ltref);
auto lt_it = ltypemap.find(ltref);
if (lt_it != ltypemap.end()){
e->lineType = (lt_it->second)->name;
}
std::map<duint32, DRW_Layer*>::iterator ly_it = layermap.find(lyref);
auto ly_it = layermap.find(lyref);
if (ly_it != layermap.end()){
e->layer = (ly_it->second)->name;
}
Expand All @@ -59,34 +59,34 @@ std::string dwgReader::findTableName(DRW::TTYPE table, dint32 handle){
std::string name;
switch (table){
case DRW::STYLE:{
std::map<duint32, DRW_Textstyle*>::iterator st_it = stylemap.find(handle);
auto st_it = stylemap.find(handle);
if (st_it != stylemap.end())
name = (st_it->second)->name;
break;}
case DRW::DIMSTYLE:{
std::map<duint32, DRW_Dimstyle*>::iterator ds_it = dimstylemap.find(handle);
auto ds_it = dimstylemap.find(handle);
if (ds_it != dimstylemap.end())
name = (ds_it->second)->name;
break;}
case DRW::BLOCK_RECORD:{ //use DRW_Block because name are more correct
// std::map<duint32, DRW_Block*>::iterator bk_it = blockmap.find(handle);
// auto bk_it = blockmap.find(handle);
// if (bk_it != blockmap.end())
std::map<duint32, DRW_Block_Record*>::iterator bk_it = blockRecordmap.find(handle);
auto bk_it = blockRecordmap.find(handle);
if (bk_it != blockRecordmap.end())
name = (bk_it->second)->name;
break;}
/* case DRW::VPORT:{
std::map<duint32, DRW_Vport*>::iterator vp_it = vportmap.find(handle);
auto vp_it = vportmap.find(handle);
if (vp_it != vportmap.end())
name = (vp_it->second)->name;
break;}*/
case DRW::LAYER:{
std::map<duint32, DRW_Layer*>::iterator ly_it = layermap.find(handle);
auto ly_it = layermap.find(handle);
if (ly_it != layermap.end())
name = (ly_it->second)->name;
break;}
case DRW::LTYPE:{
std::map<duint32, DRW_LType*>::iterator lt_it = ltypemap.find(handle);
auto lt_it = ltypemap.find(handle);
if (lt_it != ltypemap.end())
name = (lt_it->second)->name;
break;}
Expand Down Expand Up @@ -118,7 +118,7 @@ bool dwgReader::checkSentinel(dwgBuffer *buf, enum secEnum::DWGSection, bool sta
* 2 bytes size + data bytes
* last section are 2 bytes size + 2 bytes crc (size value always 2)
**/
bool dwgReader::readDwgHandles(dwgBuffer *dbuf, duint32 offset, duint32 size) {
bool dwgReader::readDwgHandles(dwgBuffer *dbuf, duint64 offset, duint64 size) {
DRW_DBG("\ndwgReader::readDwgHandles\n");
if (!dbuf->setPosition(offset))
return false;
Expand Down Expand Up @@ -175,13 +175,12 @@ bool dwgReader::readDwgTables(DRW_Header& hdr, dwgBuffer *dbuf) {
bool ret = true;
bool ret2 = true;
objHandle oc;
std::map<duint32, objHandle>::iterator mit;
dint16 oType;
duint32 bs = 0; //bit size of handle stream 2010+
duint8 *tmpByteStr;

//parse linetypes, start with linetype Control
mit = ObjectMap.find(hdr.linetypeCtrl);
auto mit = ObjectMap.find(hdr.linetypeCtrl);
if (mit==ObjectMap.end()) {
DRW_DBG("\nWARNING: LineType control not found\n");
ret = false;
Expand Down Expand Up @@ -302,10 +301,10 @@ bool dwgReader::readDwgTables(DRW_Header& hdr, dwgBuffer *dbuf) {
}

//set linetype in layer
for (std::map<duint32, DRW_Layer*>::iterator it=layermap.begin(); it!=layermap.end(); ++it) {
for (auto it=layermap.begin(); it!=layermap.end(); ++it) {
DRW_Layer *ly = it->second;
duint32 ref =ly->lTypeH.ref;
std::map<duint32, DRW_LType*>::iterator lt_it = ltypemap.find(ref);
auto lt_it = ltypemap.find(ref);
if (lt_it != ltypemap.end()){
ly->lineType = (lt_it->second)->name;
}
Expand Down Expand Up @@ -727,14 +726,13 @@ bool dwgReader::readDwgBlocks(DRW_Interface& intfa, dwgBuffer *dbuf){
bool ret2 = true;
duint32 bs =0;
duint8 *tmpByteStr;
std::map<duint32, objHandle>::iterator mit;
DRW_DBG("\nobject map total size= "); DRW_DBG(ObjectMap.size());

for (std::map<duint32, DRW_Block_Record*>::iterator it=blockRecordmap.begin(); it != blockRecordmap.end(); ++it){
for (auto it=blockRecordmap.begin(); it != blockRecordmap.end(); ++it){
DRW_Block_Record* bkr= it->second;
DRW_DBG("\nParsing Block, record handle= "); DRW_DBGH(it->first); DRW_DBG(" Name= "); DRW_DBG(bkr->name); DRW_DBG("\n");
DRW_DBG("\nFinding Block, handle= "); DRW_DBGH(bkr->block); DRW_DBG("\n");
mit = ObjectMap.find(bkr->block);
auto mit = ObjectMap.find(bkr->block);
if (mit==ObjectMap.end()) {
DRW_DBG("\nWARNING: block entity not found\n");
ret = false;
Expand Down Expand Up @@ -851,12 +849,11 @@ bool dwgReader::readPlineVertex(DRW_Polyline& pline, dwgBuffer *dbuf){
bool ret2 = true;
objHandle oc;
duint32 bs = 0;
std::map<duint32, objHandle>::iterator mit;

if (version < DRW::AC1018) { //pre 2004
duint32 nextH = pline.firstEH;
while (nextH != 0){
mit = ObjectMap.find(nextH);
auto mit = ObjectMap.find(nextH);
if (mit==ObjectMap.end()) {
nextH = pline.lastEH;//end while if entity not foud
DRW_DBG("\nWARNING: pline vertex not found\n");
Expand Down Expand Up @@ -893,7 +890,7 @@ bool dwgReader::readPlineVertex(DRW_Polyline& pline, dwgBuffer *dbuf){
} else {//2004+
for (std::list<duint32>::iterator it = pline.hadlesList.begin() ; it != pline.hadlesList.end(); ++it){
duint32 nextH = *it;
mit = ObjectMap.find(nextH);
auto mit = ObjectMap.find(nextH);
if (mit==ObjectMap.end()) {
DRW_DBG("\nWARNING: Entity of block not found\n");
ret = false;
Expand Down Expand Up @@ -935,8 +932,8 @@ bool dwgReader::readDwgEntities(DRW_Interface& intfa, dwgBuffer *dbuf){
bool ret2 = true;

DRW_DBG("\nobject map total size= "); DRW_DBG(ObjectMap.size());
std::map<duint32, objHandle>::iterator itB=ObjectMap.begin();
std::map<duint32, objHandle>::iterator itE=ObjectMap.end();
auto itB=ObjectMap.begin();
auto itE=ObjectMap.end();
while (itB != itE){
ret2 = readDwgEntity(dbuf, itB->second, intfa);
ObjectMap.erase(itB);
Expand Down Expand Up @@ -984,7 +981,7 @@ bool dwgReader::readDwgEntity(dwgBuffer *dbuf, objHandle& obj, DRW_Interface& in
buff.resetPosition();

if (oType > 499){
std::map<duint32, DRW_Class*>::iterator it = classesmap.find(oType);
auto it = classesmap.find(oType);
if (it == classesmap.end()){//fail, not found in classes set error
DRW_DBG("Class "); DRW_DBG(oType);DRW_DBG("not found, handle: "); DRW_DBG(obj.handle); DRW_DBG("\n");
delete[]tmpByteStr;
Expand Down Expand Up @@ -1173,8 +1170,8 @@ bool dwgReader::readDwgObjects(DRW_Interface& intfa, dwgBuffer *dbuf){
duint32 i=0;
DRW_DBG("\nentities map total size= "); DRW_DBG(ObjectMap.size());
DRW_DBG("\nobjects map total size= "); DRW_DBG(objObjectMap.size());
std::map<duint32, objHandle>::iterator itB=objObjectMap.begin();
std::map<duint32, objHandle>::iterator itE=objObjectMap.end();
auto itB=objObjectMap.begin();
auto itE=objObjectMap.end();
while (itB != itE){
ret2 = readDwgObject(dbuf, itB->second, intfa);
objObjectMap.erase(itB);
Expand All @@ -1183,7 +1180,7 @@ bool dwgReader::readDwgObjects(DRW_Interface& intfa, dwgBuffer *dbuf){
ret = ret2;
}
if (DRW_DBGGL == DRW_dbg::DEBUG) {
for (std::map<duint32, objHandle>::iterator it=remainingMap.begin(); it != remainingMap.end(); ++it){
for (auto it=remainingMap.begin(); it != remainingMap.end(); ++it){
DRW_DBG("\nnum.# "); DRW_DBG(i++); DRW_DBG(" Remaining object Handle, loc, type= "); DRW_DBG(it->first);
DRW_DBG(" "); DRW_DBG(it->second.loc); DRW_DBG(" "); DRW_DBG(it->second.type);
}
Expand Down
Loading

0 comments on commit c16a531

Please sign in to comment.