From 189a6d43fec161146a5482fd63e75b4fdb41e140 Mon Sep 17 00:00:00 2001 From: Jiga228 Date: Wed, 15 Oct 2025 18:20:27 +0700 Subject: [PATCH] Remove UString. And replaced std::map to std::unordered_map --- Core/Game/SaveMap/SaveMap.hpp | 26 +++---- Core/Types/UString.cpp | 131 ---------------------------------- Core/Types/UString.hpp | 32 --------- Tests/CMakeLists.txt | 2 - Tests/UStringTest.cpp | 25 ------- 5 files changed, 13 insertions(+), 203 deletions(-) delete mode 100644 Core/Types/UString.cpp delete mode 100644 Core/Types/UString.hpp delete mode 100644 Tests/UStringTest.cpp diff --git a/Core/Game/SaveMap/SaveMap.hpp b/Core/Game/SaveMap/SaveMap.hpp index e20abd1..efebe20 100644 --- a/Core/Game/SaveMap/SaveMap.hpp +++ b/Core/Game/SaveMap/SaveMap.hpp @@ -2,7 +2,7 @@ #include "ISave.h" -#include +#include #include #include #include @@ -14,22 +14,22 @@ class SaveMap final std::shared_ptr parent_; // Индивидуальные значения - std::map save_long; - std::map save_double; - std::map save_string; - std::map save_objects; + std::unordered_map save_long; + std::unordered_map save_double; + std::unordered_map save_string; + std::unordered_map save_objects; // Массивы - std::map> save_vector_integer; - std::map> save_vector_double; - std::map> save_vector_objects; - std::map> save_vector_strings; + std::unordered_map> save_vector_integer; + std::unordered_map> save_vector_double; + std::unordered_map> save_vector_objects; + std::unordered_map> save_vector_strings; // Связаные списки - std::map> save_list_integer; - std::map> save_list_double; - std::map> save_list_objects; - std::map> save_list_strings; + std::unordered_map> save_list_integer; + std::unordered_map> save_list_double; + std::unordered_map> save_list_objects; + std::unordered_map> save_list_strings; static ISave* MakeObjectByName(const std::string& name); diff --git a/Core/Types/UString.cpp b/Core/Types/UString.cpp deleted file mode 100644 index 16745cc..0000000 --- a/Core/Types/UString.cpp +++ /dev/null @@ -1,131 +0,0 @@ -#include "UString.hpp" - -#include - -unsigned int UString::FNV1aHash(const char* buf) -{ - unsigned int h_val = 0x811c9dc5; - - while (*buf) - { - h_val ^= static_cast(*buf++); - h_val *= 0x01000193; - } - - return h_val; -} - -UString::UString(const char* str) -{ - if (str == nullptr) - return; - size_ = strlen(str); - - str_ = new char[size_ + 1]; - for (size_t i = 0; i < size_; ++i) - str_[i] = str[i]; - str_[size_] = '\0'; - - hash_ = FNV1aHash(str); -} - -UString::UString(const UString& str) : size_(str.size_) -{ - if (size_ != 0 && str.str_ != nullptr) - { - str_ = new char[str.size_ + 1]; - strcpy_s(str_, size_ + 1, str.str_); - } - hash_ = str.hash_; -} - -UString::UString(UString&& str) noexcept -{ - is_moved_.store(true); - str_ = str.str_; - size_ = str.size_; - hash_ = str.hash_; -} - -UString::~UString() -{ - if (is_moved_.load() == false) - delete[] str_; -} - -UString& UString::operator=(const UString& str) -{ - if (&str != this) - { - if (size_ != 0 && str.str_ != nullptr) - { - str_ = new char[str.size_]; - strcpy_s(str_, size_, str.str_); - } - } - is_moved_.store(false); - hash_ = FNV1aHash(str_); - return *this; -} - -UString& UString::operator=(UString&& str) noexcept -{ - str.is_moved_.store(true); - str_ = str.str_; - size_ = str.size_; - is_moved_.store(false); - hash_ = FNV1aHash(str_); - return *this; -} - -void UString::operator+=(const UString& str) -{ - char* new_str = new char[size_ + str.size_ + 1]; - strcpy_s(new_str, size_ + str.size_ + 1, str_); - strcpy_s(new_str + size_, str.size_ + 1, str.str_); - - if (is_moved_.load() == false) - delete[] str_; - str_ = new_str; - size_ += str.size_; - - is_moved_.store(false); - hash_ = FNV1aHash(str_); -} - -void UString::operator+=(const char* str) -{ - size_t str_size = strlen(str); - char* new_str = new char[size_ + str_size + 1]; - strcpy_s(new_str, size_ + str_size + 1, str_); - strcpy_s(new_str + size_, str_size + 1, str); - - if (is_moved_.load() == false) - delete[] str_; - str_ = new_str; - size_ += str_size; - - is_moved_.store(false); - hash_ = FNV1aHash(str_); -} - -bool UString::operator==(const UString& str) const -{ - return hash_ == str.hash_; -} - -bool UString::operator==(const char* str) const -{ - unsigned int hash = FNV1aHash(str); - return hash_ == hash; -} - -bool UString::operator!=(const UString& str) const -{ - return !(*this == str); -} - -bool UString::operator!=(const char* str) const -{ - return !(*this == str); -} diff --git a/Core/Types/UString.hpp b/Core/Types/UString.hpp deleted file mode 100644 index 8c863ae..0000000 --- a/Core/Types/UString.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#include -#include - -class UString -{ - unsigned int hash_ = 0; - std::atomic_bool is_moved_ = false; - char* str_ = nullptr; - size_t size_ = 0; - - static unsigned int FNV1aHash (const char *buf); -public: - UString(const char* str); - UString(const UString& str); - UString(UString&& str) noexcept; - ~UString(); - - UString& operator=(const UString& str); - UString& operator=(UString&& str) noexcept; - void operator+=(const UString& str); - void operator+=(const char* str); - bool operator==(const UString& str) const; - bool operator==(const char* str) const; - bool operator!=(const UString& str) const; - bool operator!=(const char* str) const; - - size_t length() const { return size_; } - const char* c_str() const { return str_; } - std::string std_str() const { return std::string(str_, size_); } -}; diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 8e0ad46..3c605de 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -11,10 +11,8 @@ FetchContent_MakeAvailable(googletest) enable_testing() file(GLOB SRC - "UStringTest.cpp" "SaveMapTest.cpp" - "${PROJECT_SOURCE_DIR}/Core/Types/UString.cpp" "${PROJECT_SOURCE_DIR}/Core/Game/SaveMap/SaveMap.cpp" ) diff --git a/Tests/UStringTest.cpp b/Tests/UStringTest.cpp deleted file mode 100644 index 19de15d..0000000 --- a/Tests/UStringTest.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include -#include "Types/UString.hpp" -#include - -TEST(UStringTest, creae_string) -{ - UString str("Hello, World!"); - EXPECT_EQ(str, "Hello, World!"); - EXPECT_NE(str, "Hello, UwU!"); - EXPECT_EQ(str.length(), 13); -} - -TEST(UStringTest, concatenate_string) -{ - UString str1("Hello, "); - UString str2("World!"); - str1 += str2; - EXPECT_EQ(str1, "Hello, World!"); - EXPECT_EQ(str1.length(), 13); - - UString str3("Hello, "); - str3 += "UwU!"; - EXPECT_EQ(str3, "Hello, UwU!"); - EXPECT_EQ(str3.length(), 11); -} \ No newline at end of file