Tiny optimization for ConfigFile reading
This commit is contained in:
+51
-64
@@ -1,6 +1,7 @@
|
|||||||
#include "ConfigFile.h"
|
#include "ConfigFile.h"
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#include <map>
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
|
||||||
#define FLAG_NONE 0
|
#define FLAG_NONE 0
|
||||||
@@ -26,79 +27,65 @@ ConfigFile ConfigFile::Load(const std::string& filename)
|
|||||||
|
|
||||||
if(file.is_open())
|
if(file.is_open())
|
||||||
{
|
{
|
||||||
|
std::map<std::string, std::string*> strings =
|
||||||
|
{
|
||||||
|
{"#srcdir", &conf.srcdir},
|
||||||
|
{"#outputdir", &conf.outputdir},
|
||||||
|
{"#outputname", &conf.outputname},
|
||||||
|
{"#projectname", &conf.projectname},
|
||||||
|
{"#hfile", &conf.hFile},
|
||||||
|
};
|
||||||
|
|
||||||
|
std::map<std::string, std::vector<std::string>*> vectors =
|
||||||
|
{
|
||||||
|
{"#libs", &conf.libs},
|
||||||
|
{"#libdirs", &conf.libdirs},
|
||||||
|
{"#includedirs", &conf.includedirs},
|
||||||
|
{"#compileflags", &conf.flags},
|
||||||
|
{"#defines", &conf.defines},
|
||||||
|
};
|
||||||
|
|
||||||
|
std::map<std::string, bool*> booleans =
|
||||||
|
{
|
||||||
|
{"#executable", &conf.executable},
|
||||||
|
{"#shared", &conf.shared},
|
||||||
|
{"#generatehfile", &conf.generateHFile},
|
||||||
|
};
|
||||||
|
|
||||||
while(std::getline(file,line))
|
while(std::getline(file,line))
|
||||||
{
|
{
|
||||||
if(line[0]=='#')
|
if(line[0]=='#')
|
||||||
{
|
{
|
||||||
if(line == "#libs")
|
// The format is a bit wacky, but it is this way since we do not want
|
||||||
|
// to use map::find for all maps. This way we gain some optimization.
|
||||||
|
auto&& itStr{strings.find(line)};
|
||||||
|
if(itStr != strings.end())
|
||||||
{
|
{
|
||||||
vec = &conf.libs;
|
s = itStr->second;
|
||||||
loadFlag = FLAG_VECTOR;
|
|
||||||
}
|
|
||||||
else if(line == "#libdirs")
|
|
||||||
{
|
|
||||||
vec = &conf.libdirs;
|
|
||||||
loadFlag = FLAG_VECTOR;
|
|
||||||
}
|
|
||||||
else if(line == "#includedirs")
|
|
||||||
{
|
|
||||||
vec = &conf.includedirs;
|
|
||||||
loadFlag = FLAG_VECTOR;
|
|
||||||
}
|
|
||||||
else if(line == "#compileflags")
|
|
||||||
{
|
|
||||||
vec = &conf.flags;
|
|
||||||
loadFlag = FLAG_VECTOR;
|
|
||||||
}
|
|
||||||
else if(line == "#defines")
|
|
||||||
{
|
|
||||||
vec = &conf.defines;
|
|
||||||
loadFlag = FLAG_VECTOR;
|
|
||||||
}
|
|
||||||
else if(line == "#srcdir")
|
|
||||||
{
|
|
||||||
s = &conf.srcdir;
|
|
||||||
loadFlag = FLAG_STRING;
|
loadFlag = FLAG_STRING;
|
||||||
}
|
}
|
||||||
else if(line == "#outputdir")
|
|
||||||
{
|
|
||||||
s = &conf.outputdir;
|
|
||||||
loadFlag = FLAG_STRING;
|
|
||||||
}
|
|
||||||
else if(line == "#outputname")
|
|
||||||
{
|
|
||||||
s = &conf.outputname;
|
|
||||||
loadFlag = FLAG_STRING;
|
|
||||||
}
|
|
||||||
else if(line == "#projectname")
|
|
||||||
{
|
|
||||||
s = &conf.projectname;
|
|
||||||
loadFlag = FLAG_STRING;
|
|
||||||
}
|
|
||||||
else if(line == "#hfile")
|
|
||||||
{
|
|
||||||
s = &conf.hFile;
|
|
||||||
loadFlag = FLAG_STRING;
|
|
||||||
}
|
|
||||||
else if(line == "#executable")
|
|
||||||
{
|
|
||||||
b = &conf.executable;
|
|
||||||
loadFlag = FLAG_BOOL;
|
|
||||||
}
|
|
||||||
else if(line == "#shared")
|
|
||||||
{
|
|
||||||
b = &conf.shared;
|
|
||||||
loadFlag = FLAG_BOOL;
|
|
||||||
}
|
|
||||||
else if(line == "#generatehfile")
|
|
||||||
{
|
|
||||||
b = &conf.generateHFile;
|
|
||||||
loadFlag = FLAG_BOOL;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_ERROR("Invalid flag: ", line);
|
auto&& itVec{vectors.find(line)};
|
||||||
loadFlag = FLAG_NONE;
|
if(itVec != vectors.end())
|
||||||
|
{
|
||||||
|
vec = itVec->second;
|
||||||
|
loadFlag = FLAG_VECTOR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto&& itBool{booleans.find(line)};
|
||||||
|
if(itBool != booleans.end())
|
||||||
|
{
|
||||||
|
b = itBool->second;
|
||||||
|
loadFlag = FLAG_BOOL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG_ERROR("Invalid flag: ", line);
|
||||||
|
loadFlag = FLAG_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user