diff --git a/DataStructures/HashTable.h b/DataStructures/HashTable.h index 9c89ae579..199c6df86 100644 --- a/DataStructures/HashTable.h +++ b/DataStructures/HashTable.h @@ -28,37 +28,50 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef HASH_TABLE_H #define HASH_TABLE_H -#include +#include -template class HashTable : public std::unordered_map +template +class HashTable { private: - typedef std::unordered_map super; + typedef std::pair KeyValPair; + std::vector table; public: - HashTable() : super() {} + HashTable() {} - explicit HashTable(const unsigned size) : super(size) {} + inline void Add(Key const &key, Value const &value) + { + table.emplace_back(std::move(key), std::move(value)); + } - inline void Add(Key const &key, Value const &value) { super::emplace(key, value); } + inline void Clear() + { + table.clear(); + } inline const Value Find(Key const &key) const { - auto iter = super::find(key); - if (iter == super::end()) + for (const auto &key_val_pair : table) { - return Value(); + if (key_val_pair.first == key) + { + return key_val_pair.second; + } } - return iter->second; + return Value(); } inline const bool Holds(Key const &key) const { - if (super::find(key) == super::end()) + for (const auto &key_val_pair : table) { - return false; + if (key_val_pair.first == key) + { + return true; + } } - return true; + return false; } }; diff --git a/Extractor/ExtractionWay.h b/Extractor/ExtractionWay.h index be58049ca..6c3c93d63 100644 --- a/Extractor/ExtractionWay.h +++ b/Extractor/ExtractionWay.h @@ -43,7 +43,7 @@ struct ExtractionWay id = SPECIAL_NODEID; nameID = INVALID_NAMEID; path.clear(); - keyVals.clear(); + keyVals.Clear(); direction = ExtractionWay::notSure; speed = -1; backward_speed = -1; diff --git a/Extractor/XMLParser.cpp b/Extractor/XMLParser.cpp index e4bdd8dd6..5cf54483c 100644 --- a/Extractor/XMLParser.cpp +++ b/Extractor/XMLParser.cpp @@ -40,7 +40,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -XMLParser::XMLParser(const char *filename, ExtractorCallbacks *extractor_callbacks, ScriptingEnvironment &scripting_environment) +XMLParser::XMLParser(const char *filename, + ExtractorCallbacks *extractor_callbacks, + ScriptingEnvironment &scripting_environment) : BaseParser(extractor_callbacks, scripting_environment) { inputReader = inputReaderFactory(filename); @@ -81,7 +83,8 @@ bool XMLParser::Parse() if (use_turn_restrictions && xmlStrEqual(currentName, (const xmlChar *)"relation") == 1) { InputRestrictionContainer current_restriction = ReadXMLRestriction(); - if ((UINT_MAX != current_restriction.fromWay) && !extractor_callbacks->ProcessRestriction(current_restriction)) + if ((UINT_MAX != current_restriction.fromWay) && + !extractor_callbacks->ProcessRestriction(current_restriction)) { std::cerr << "[XMLParser] restriction not parsed" << std::endl; } @@ -135,7 +138,7 @@ InputRestrictionContainer XMLParser::ReadXMLRestriction() if (key != NULL && value != NULL) { if (xmlStrEqual(key, (const xmlChar *)"restriction") && - StringStartsWith((const char*)value, "only_") ) + StringStartsWith((const char *)value, "only_")) { restriction.restriction.flags.isOnly = true; } @@ -195,7 +198,6 @@ InputRestrictionContainer XMLParser::ReadXMLRestriction() xmlFree(child_name); } - if (ShouldIgnoreRestriction(except_tag_string)) { restriction.fromWay = UINT_MAX; // workaround to ignore the restriction diff --git a/Extractor/XMLParser.h b/Extractor/XMLParser.h index 654b081b3..178747ae7 100644 --- a/Extractor/XMLParser.h +++ b/Extractor/XMLParser.h @@ -38,7 +38,9 @@ class ExtractorCallbacks; class XMLParser : public BaseParser { public: - XMLParser(const char *filename, ExtractorCallbacks *extractor_callbacks, ScriptingEnvironment &scripting_environment); + XMLParser(const char *filename, + ExtractorCallbacks *extractor_callbacks, + ScriptingEnvironment &scripting_environment); bool ReadHeader(); bool Parse();