refactor Hashtable
This commit is contained in:
parent
e7cec83a4c
commit
e06fe6935a
@ -24,56 +24,35 @@ or see http://www.gnu.org/licenses/agpl.txt.
|
||||
#ifndef HASHTABLE_H_
|
||||
#define HASHTABLE_H_
|
||||
|
||||
#include <boost/ref.hpp>
|
||||
#include <boost/unordered_map.hpp>
|
||||
|
||||
template<typename keyT, typename valueT>
|
||||
class HashTable {
|
||||
typedef boost::unordered_map<keyT, valueT> MyHashTable;
|
||||
class HashTable : public boost::unordered_map<keyT, valueT> {
|
||||
private:
|
||||
typedef boost::unordered_map<keyT, valueT> super;
|
||||
public:
|
||||
typedef typename boost::unordered_map<keyT, valueT>::const_iterator MyIterator;
|
||||
typedef MyIterator iterator;
|
||||
HashTable() { }
|
||||
HashTable(const unsigned size) {
|
||||
table.resize(size);
|
||||
}
|
||||
HashTable() : super() { }
|
||||
|
||||
HashTable(const unsigned size) : super(size) { }
|
||||
|
||||
inline void Add(const keyT& key, const valueT& value){
|
||||
table[key] = value;
|
||||
}
|
||||
inline void Set(const keyT& key, const valueT& value){
|
||||
table[key] = value;
|
||||
super::insert(std::make_pair(key, value));
|
||||
}
|
||||
|
||||
inline valueT Find(const keyT& key) const {
|
||||
if(table.find(key) == table.end())
|
||||
if(super::find(key) == super::end()) {
|
||||
return valueT();
|
||||
return table.find(key)->second;
|
||||
}
|
||||
return boost::ref(super::find(key)->second);
|
||||
}
|
||||
|
||||
inline bool Holds(const keyT& key) const {
|
||||
if(table.find(key) == table.end())
|
||||
if(super::find(key) == super::end()) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
void EraseAll() {
|
||||
if(table.size() > 0)
|
||||
table.clear();
|
||||
}
|
||||
|
||||
inline valueT operator[] (keyT key) const {
|
||||
if(table.find(key) == table.end())
|
||||
return valueT();
|
||||
return table.find(key)->second;
|
||||
}
|
||||
inline unsigned Size() const {
|
||||
return table.size();
|
||||
}
|
||||
MyIterator begin() const {
|
||||
return table.begin();
|
||||
}
|
||||
MyIterator end() const {
|
||||
return table.end();
|
||||
}
|
||||
private:
|
||||
MyHashTable table;
|
||||
};
|
||||
|
||||
#endif /* HASHTABLE_H_ */
|
||||
|
@ -46,7 +46,7 @@ struct ImportNode : public _Node {
|
||||
HashTable<std::string, std::string> keyVals;
|
||||
|
||||
inline void Clear() {
|
||||
keyVals.EraseAll();
|
||||
keyVals.clear();
|
||||
lat = 0; lon = 0; id = 0; bollard = false; trafficLight = false;
|
||||
}
|
||||
};
|
||||
|
@ -49,7 +49,7 @@ struct ExtractionWay {
|
||||
id = UINT_MAX;
|
||||
nameID = UINT_MAX;
|
||||
path.clear();
|
||||
keyVals.EraseAll();
|
||||
keyVals.clear();
|
||||
direction = ExtractionWay::notSure;
|
||||
speed = -1;
|
||||
backward_speed = -1;
|
||||
|
@ -177,7 +177,7 @@ inline void PBFParser::parseDenseNode(_ThreadData * threadData) {
|
||||
const int keyValue = dense.keys_vals ( denseTagIndex+1 );
|
||||
const std::string & key = threadData->PBFprimitiveBlock.stringtable().s(tagValue).data();
|
||||
const std::string & value = threadData->PBFprimitiveBlock.stringtable().s(keyValue).data();
|
||||
extracted_nodes_vector[i].keyVals.Add(key, value);
|
||||
extracted_nodes_vector[i].keyVals.insert(std::make_pair(key, value));
|
||||
denseTagIndex += 2;
|
||||
}
|
||||
}
|
||||
@ -306,7 +306,7 @@ inline void PBFParser::parseWay(_ThreadData * threadData) {
|
||||
for(int j = 0; j < number_of_keys; ++j) {
|
||||
const std::string & key = threadData->PBFprimitiveBlock.stringtable().s(inputWay.keys(j));
|
||||
const std::string & val = threadData->PBFprimitiveBlock.stringtable().s(inputWay.vals(j));
|
||||
parsed_way_vector[i].keyVals.Add(key, val);
|
||||
parsed_way_vector[i].keyVals.insert(std::make_pair(key, val));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,8 +25,9 @@ ScriptingEnvironment::ScriptingEnvironment(const char * fileName) {
|
||||
INFO("Using script " << fileName);
|
||||
|
||||
// Create a new lua state
|
||||
for(int i = 0; i < omp_get_max_threads(); ++i)
|
||||
for(int i = 0; i < omp_get_max_threads(); ++i) {
|
||||
luaStateVector.push_back(luaL_newstate());
|
||||
}
|
||||
|
||||
// Connect LuaBind to this lua state for all threads
|
||||
#pragma omp parallel
|
||||
@ -85,6 +86,7 @@ ScriptingEnvironment::ScriptingEnvironment(const char * fileName) {
|
||||
luabind::value("opposite", 3)
|
||||
]
|
||||
];
|
||||
|
||||
luabind::module(myLuaState) [
|
||||
luabind::class_<std::vector<std::string> >("vector")
|
||||
.def("Add", &std::vector<std::string>::push_back)
|
||||
|
@ -38,8 +38,8 @@ public:
|
||||
NearestPlugin(QueryObjectsStorage * objects) : names(objects->names) {
|
||||
nodeHelpDesk = objects->nodeHelpDesk;
|
||||
|
||||
descriptorTable.Set("", 0); //default descriptor
|
||||
descriptorTable.Set("json", 1);
|
||||
descriptorTable.insert(std::make_pair("" , 0)); //default descriptor
|
||||
descriptorTable.insert(std::make_pair("json", 1));
|
||||
}
|
||||
std::string GetDescriptor() const { return std::string("nearest"); }
|
||||
std::string GetVersionString() const { return std::string("0.3 (DL)"); }
|
||||
|
@ -53,7 +53,7 @@ struct RouteParameters {
|
||||
std::string language;
|
||||
std::vector<std::string> hints;
|
||||
std::vector<_Coordinate> coordinates;
|
||||
typedef HashTable<std::string, std::string>::MyIterator OptionsIterator;
|
||||
typedef HashTable<std::string, std::string>::const_iterator OptionsIterator;
|
||||
|
||||
void setZoomLevel(const short i) {
|
||||
if (18 > i && 0 < i)
|
||||
|
@ -58,9 +58,9 @@ public:
|
||||
|
||||
searchEnginePtr = new SearchEngine(graph, nodeHelpDesk, names);
|
||||
|
||||
descriptorTable.Set("", 0); //default descriptor
|
||||
descriptorTable.Set("json", 0);
|
||||
descriptorTable.Set("gpx", 1);
|
||||
descriptorTable.insert(std::make_pair("" , 0)); //default descriptor
|
||||
descriptorTable.insert(std::make_pair("json", 0));
|
||||
descriptorTable.insert(std::make_pair("gpx" , 1));
|
||||
}
|
||||
|
||||
virtual ~ViaRoutePlugin() {
|
||||
|
@ -60,7 +60,9 @@ int main (int argc, char *argv[]) {
|
||||
unsigned number_of_threads = omp_get_num_procs();
|
||||
if(testDataFile("extractor.ini")) {
|
||||
BaseConfiguration extractorConfig("extractor.ini");
|
||||
INFO("2");
|
||||
unsigned rawNumber = stringToInt(extractorConfig.GetParameter("Threads"));
|
||||
INFO("3");
|
||||
if( rawNumber != 0 && rawNumber <= number_of_threads) {
|
||||
number_of_threads = rawNumber;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user