diff --git a/projects/kiwano/kiwano.vcxproj b/projects/kiwano/kiwano.vcxproj index b3b2c395..430e9e4b 100644 --- a/projects/kiwano/kiwano.vcxproj +++ b/projects/kiwano/kiwano.vcxproj @@ -90,6 +90,7 @@ + @@ -149,6 +150,7 @@ + diff --git a/projects/kiwano/kiwano.vcxproj.filters b/projects/kiwano/kiwano.vcxproj.filters index 94abf255..24b70a35 100644 --- a/projects/kiwano/kiwano.vcxproj.filters +++ b/projects/kiwano/kiwano.vcxproj.filters @@ -297,6 +297,9 @@ core + + utils + @@ -470,5 +473,8 @@ utils + + utils + \ No newline at end of file diff --git a/src/kiwano/core/any.hpp b/src/kiwano/core/any.hpp index e01f86dc..31656dfc 100644 --- a/src/kiwano/core/any.hpp +++ b/src/kiwano/core/any.hpp @@ -319,7 +319,7 @@ protected: } protected: - static const auto ANY_SMALL_SPACE_SIZE = 16U; + static const auto ANY_SMALL_SPACE_SIZE = 8U; template struct decayed_is_small : public std::bool_constant diff --git a/src/kiwano/utils/UserData.cpp b/src/kiwano/utils/UserData.cpp new file mode 100644 index 00000000..9a842159 --- /dev/null +++ b/src/kiwano/utils/UserData.cpp @@ -0,0 +1,73 @@ +// Copyright (c) 2018-2019 Kiwano - Nomango +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#include + +namespace kiwano +{ + Any UserData::Get(String const& key, Any const& default_data) const + { + auto iter = data_.find(key); + if (iter != data_.end()) + { + return iter->second; + } + return default_data; + } + + void UserData::Set(String const& key, Any const& data) + { + data_.insert(std::make_pair(key, data)); + } + + void UserData::Set(Pair const& pair) + { + data_.insert(pair); + } + + void UserData::Set(std::initializer_list> const& list) + { + for (const auto& pair : list) + { + data_.insert(pair); + } + } + + void UserData::Set(DataMap const& map) + { + data_ = map; + } + + bool UserData::Contains(String const& key) const + { + return data_.count(key) != 0; + } + + const UnorderedMap& UserData::GetData() const + { + return data_; + } + + void UserData::Clear() + { + data_.clear(); + } + +} diff --git a/src/kiwano/utils/UserData.h b/src/kiwano/utils/UserData.h new file mode 100644 index 00000000..4584e0e7 --- /dev/null +++ b/src/kiwano/utils/UserData.h @@ -0,0 +1,59 @@ +// Copyright (c) 2018-2019 Kiwano - Nomango +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma once +#include + +namespace kiwano +{ + // UserData is a simple database for user + class KGE_API UserData + : public Singleton + { + KGE_DECLARE_SINGLETON(UserData); + + public: + using DataMap = UnorderedMap; + + Any Get(String const& key, Any const& default_data = Any()) const; + + void Set(String const& key, Any const& data); + + void Set(Pair const& pair); + + void Set(std::initializer_list> const& list); + + void Set(DataMap const& map); + + bool Contains(String const& key) const; + + const DataMap& GetData() const; + + void Clear(); + + private: + UserData() = default; + UserData(const UserData&) = default; + UserData& operator=(const UserData&) = default; + + private: + DataMap data_; + }; +}