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_;
+ };
+}