diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c8ffef6c0a..0cf201ce38f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ cmake_minimum_required(VERSION 3.22 FATAL_ERROR) # VCPKG # cmake -DCMAKE_TOOLCHAIN_FILE=/opt/workspace/vcpkg/scripts/buildsystems/vcpkg.cmake .. # Needed libs is in file vcpkg.json -# Windows required libs: .\vcpkg install --triplet x64-windows asio pugixml spdlog curl jsoncpp protobuf parallel-hashmap magic-enum mio luajit libmariadb mpir abseil +# Windows required libs: .\vcpkg install --triplet x64-windows asio pugixml spdlog curl protobuf parallel-hashmap magic-enum mio luajit libmariadb mpir abseil if(DEFINED ENV{VCPKG_ROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE) set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "") diff --git a/cmake/modules/BaseConfig.cmake b/cmake/modules/BaseConfig.cmake index 6f58a2eebdb..6a8ce69ed4b 100644 --- a/cmake/modules/BaseConfig.cmake +++ b/cmake/modules/BaseConfig.cmake @@ -31,7 +31,6 @@ find_package(ZLIB REQUIRED) find_package(absl CONFIG REQUIRED) find_package(asio CONFIG REQUIRED) find_package(eventpp CONFIG REQUIRED) -find_package(jsoncpp CONFIG REQUIRED) find_package(magic_enum CONFIG REQUIRED) find_package(opentelemetry-cpp CONFIG REQUIRED) find_package(prometheus-cpp CONFIG REQUIRED) diff --git a/cmake/modules/CanaryLib.cmake b/cmake/modules/CanaryLib.cmake index 4838935f19e..270bbf59a99 100644 --- a/cmake/modules/CanaryLib.cmake +++ b/cmake/modules/CanaryLib.cmake @@ -124,16 +124,14 @@ endif() if (MSVC) if(BUILD_STATIC_LIBRARY) - target_link_libraries(${PROJECT_NAME}_lib PUBLIC jsoncpp_static) set(VCPKG_TARGET_TRIPLET "x64-windows-static" CACHE STRING "") else() - target_link_libraries(${PROJECT_NAME}_lib PUBLIC jsoncpp_lib) set(VCPKG_TARGET_TRIPLET "x64-windows" CACHE STRING "") endif() target_link_libraries(${PROJECT_NAME}_lib PUBLIC ${CMAKE_THREAD_LIBS_INIT} ${MYSQL_CLIENT_LIBS}) else() - target_link_libraries(${PROJECT_NAME}_lib PUBLIC jsoncpp_static Threads::Threads) + target_link_libraries(${PROJECT_NAME}_lib PUBLIC Threads::Threads) endif (MSVC) # === OpenMP === diff --git a/src/game/game.cpp b/src/game/game.cpp index 11ed432da15..9310f1c9a20 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -207,6 +207,8 @@ Game::Game() { // Create instance of IOWheel to Game class m_IOWheel = std::make_unique(); + wildcardTree = std::make_shared(false); + m_highscoreCategoriesNames = { { static_cast(HighscoreCategories_t::ACHIEVEMENTS), "Achievement Points" }, { static_cast(HighscoreCategories_t::AXE_FIGHTING), "Axe Fighting" }, @@ -886,7 +888,7 @@ ReturnValue Game::getPlayerByNameWildcard(const std::string &s, std::shared_ptr< if (s.back() == '~') { const std::string &query = asLowerCaseString(s.substr(0, strlen - 1)); std::string result; - ReturnValue ret = wildcardTree.findOne(query, result); + ReturnValue ret = wildcardTree->findOne(query, result); if (ret != RETURNVALUE_NOERROR) { return ret; } @@ -9689,14 +9691,14 @@ void Game::updatePlayerSaleItems(uint32_t playerId) { void Game::addPlayer(std::shared_ptr player) { const std::string &lowercase_name = asLowerCaseString(player->getName()); mappedPlayerNames[lowercase_name] = player; - wildcardTree.insert(lowercase_name); + wildcardTree->insert(lowercase_name); players[player->getID()] = player; } void Game::removePlayer(std::shared_ptr player) { const std::string &lowercase_name = asLowerCaseString(player->getName()); mappedPlayerNames.erase(lowercase_name); - wildcardTree.remove(lowercase_name); + wildcardTree->remove(lowercase_name); players.erase(player->getID()); } diff --git a/src/game/game.hpp b/src/game/game.hpp index d70263c1775..708aa4b1782 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -840,7 +840,7 @@ class Game { size_t lastBucket = 0; size_t lastImbuedBucket = 0; - WildcardTreeNode wildcardTree { false }; + std::shared_ptr wildcardTree; std::map> npcs; std::map> monsters; diff --git a/src/pch.hpp b/src/pch.hpp index 522411b5621..7c38a99ee94 100644 --- a/src/pch.hpp +++ b/src/pch.hpp @@ -45,6 +45,7 @@ #include #include #include +#include // -------------------- // System Includes @@ -95,9 +96,6 @@ struct fmt::formatter, char>> : formatter< // GMP #include -// JSON -#include - // LUA #if __has_include("luajit/lua.hpp") #include diff --git a/src/utils/wildcardtree.cpp b/src/utils/wildcardtree.cpp index 1e91b9b4169..4fd830b64cb 100644 --- a/src/utils/wildcardtree.cpp +++ b/src/utils/wildcardtree.cpp @@ -11,37 +11,37 @@ #include "utils/wildcardtree.hpp" -WildcardTreeNode* WildcardTreeNode::getChild(char ch) { +std::shared_ptr WildcardTreeNode::getChild(char ch) { auto it = children.find(ch); if (it == children.end()) { return nullptr; } - return &it->second; + return it->second; } -const WildcardTreeNode* WildcardTreeNode::getChild(char ch) const { +std::shared_ptr WildcardTreeNode::getChild(char ch) const { auto it = children.find(ch); if (it == children.end()) { return nullptr; } - return &it->second; + return it->second; } -WildcardTreeNode* WildcardTreeNode::addChild(char ch, bool breakp) { - WildcardTreeNode* child = getChild(ch); +std::shared_ptr WildcardTreeNode::addChild(char ch, bool breakp) { + std::shared_ptr child = getChild(ch); if (child) { if (breakp && !child->breakpoint) { child->breakpoint = true; } } else { - auto pair = children.emplace(std::piecewise_construct, std::forward_as_tuple(ch), std::forward_as_tuple(breakp)); - child = &pair.first->second; + auto pair = children.emplace(std::piecewise_construct, std::forward_as_tuple(ch), std::forward_as_tuple(std::make_shared(breakp))); + child = pair.first->second; } return child; } void WildcardTreeNode::insert(const std::string &str) { - WildcardTreeNode* cur = this; + std::shared_ptr cur = static_self_cast(); size_t length = str.length() - 1; for (size_t pos = 0; pos < length; ++pos) { @@ -52,9 +52,9 @@ void WildcardTreeNode::insert(const std::string &str) { } void WildcardTreeNode::remove(const std::string &str) { - WildcardTreeNode* cur = this; + std::shared_ptr cur = static_self_cast(); - std::stack path; + std::stack> path; path.push(cur); size_t len = str.length(); for (size_t pos = 0; pos < len; ++pos) { @@ -85,7 +85,7 @@ void WildcardTreeNode::remove(const std::string &str) { } ReturnValue WildcardTreeNode::findOne(const std::string &query, std::string &result) const { - const WildcardTreeNode* cur = this; + auto cur = static_self_cast(); for (char pos : query) { cur = cur->getChild(pos); if (!cur) { @@ -105,6 +105,6 @@ ReturnValue WildcardTreeNode::findOne(const std::string &query, std::string &res auto it = cur->children.begin(); result += it->first; - cur = &it->second; + cur = it->second; } while (true); } diff --git a/src/utils/wildcardtree.hpp b/src/utils/wildcardtree.hpp index 07728ae9849..9f3d2cf8ece 100644 --- a/src/utils/wildcardtree.hpp +++ b/src/utils/wildcardtree.hpp @@ -11,19 +11,19 @@ #include "declarations.hpp" -class WildcardTreeNode { +class WildcardTreeNode : public SharedObject { public: explicit WildcardTreeNode(bool initBreakpoint) : breakpoint(initBreakpoint) { } - WildcardTreeNode(WildcardTreeNode &&other) = default; + WildcardTreeNode(WildcardTreeNode &&other) noexcept = default; // non-copyable WildcardTreeNode(const WildcardTreeNode &) = delete; WildcardTreeNode &operator=(const WildcardTreeNode &) = delete; - WildcardTreeNode* getChild(char ch); - const WildcardTreeNode* getChild(char ch) const; - WildcardTreeNode* addChild(char ch, bool breakpoint); + std::shared_ptr getChild(char ch); + std::shared_ptr getChild(char ch) const; + std::shared_ptr addChild(char ch, bool breakpoint); void insert(const std::string &str); void remove(const std::string &str); @@ -31,6 +31,6 @@ class WildcardTreeNode { ReturnValue findOne(const std::string &query, std::string &result) const; private: - std::map children; + std::map> children; bool breakpoint; }; diff --git a/vcpkg.json b/vcpkg.json index 82f1058bd94..a0bc4a0332b 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -9,7 +9,6 @@ "bext-ut", "curl", "eventpp", - "jsoncpp", "luajit", "magic-enum", "mio", diff --git a/vcproj/settings.props b/vcproj/settings.props index 35625d790b9..6f98969614d 100644 --- a/vcproj/settings.props +++ b/vcproj/settings.props @@ -21,7 +21,6 @@ libcurl.lib; fmt.lib; spdlog.lib; - jsoncpp.lib; abseil_dll.lib; argon2.lib; opentelemetry_common.lib; @@ -60,7 +59,6 @@ libcurl-d.lib; fmtd.lib; spdlogd.lib; - jsoncpp.lib; abseil_dll.lib; argon2.lib; opentelemetry_common.lib;