diff --git a/include/opendht/utils.h b/include/opendht/utils.h index 225d8e2f89fd3bf15d1ed28d67a95f28bbbd32b2..d7c1783c0d9f2efe8b3794b5bec921f9d6311fbb 100644 --- a/include/opendht/utils.h +++ b/include/opendht/utils.h @@ -153,6 +153,6 @@ unpackMsg(Blob b) { msgpack::unpacked unpackMsg(Blob b); -msgpack::object* findMapValue(msgpack::object& map, const std::string& key); +msgpack::object* findMapValue(const msgpack::object& map, const char* key); } // namespace dht diff --git a/src/utils.cpp b/src/utils.cpp index 458b044df19be9fbe980357ef5975c10c19d68f6..e27f2ced02ebe2647e63a3a4d579e2becc505814 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -270,11 +270,11 @@ unpackMsg(Blob b) { } msgpack::object* -findMapValue(msgpack::object& map, const std::string& key) { +findMapValue(const msgpack::object& map, const char* key) { if (map.type != msgpack::type::MAP) throw msgpack::type_error(); for (unsigned i = 0; i < map.via.map.size; i++) { auto& o = map.via.map.ptr[i]; - if (o.key.type == msgpack::type::STR && o.key.as<std::string>() == key) + if (o.key.type == msgpack::type::STR && std::strncmp(o.key.via.str.ptr, key, o.key.via.str.size) == 0) return &o.val; } return nullptr; diff --git a/src/value.cpp b/src/value.cpp index 0750a530c71c3875b713156af5223634cf4ca280..3f8298eb8f1c5a6d977d56a0bd0eaee5613f706d 100644 --- a/src/value.cpp +++ b/src/value.cpp @@ -87,20 +87,6 @@ ValueType::DEFAULT_STORE_POLICY(InfoHash, const std::shared_ptr<Value>& v, const return v->size() <= MAX_VALUE_SIZE; } -msgpack::object* -findMapValue(const msgpack::object& map, const std::string& key) { - if (map.type != msgpack::type::MAP) throw msgpack::type_error(); - for (unsigned i = 0; i < map.via.map.size; i++) { - auto& o = map.via.map.ptr[i]; - if(o.key.type != msgpack::type::STR) - continue; - if (o.key.as<std::string>() == key) { - return &o.val; - } - } - return nullptr; -} - size_t Value::size() const {