update kiwano::core::any
This commit is contained in:
		
							parent
							
								
									720d1fd6e0
								
							
						
					
					
						commit
						225e703be4
					
				|  | @ -57,12 +57,12 @@ namespace kiwano | |||
| #endif | ||||
| 	} | ||||
| 
 | ||||
| 	void * ObjectBase::GetUserData() const | ||||
| 	const Any& ObjectBase::GetUserData() const | ||||
| 	{ | ||||
| 		return user_data_; | ||||
| 	} | ||||
| 
 | ||||
| 	void ObjectBase::SetUserData(void * data) | ||||
| 	void ObjectBase::SetUserData(Any const& data) | ||||
| 	{ | ||||
| 		user_data_ = data; | ||||
| 	} | ||||
|  |  | |||
|  | @ -36,9 +36,9 @@ namespace kiwano | |||
| 
 | ||||
| 		virtual ~ObjectBase(); | ||||
| 
 | ||||
| 		void* GetUserData() const; | ||||
| 		const Any&		GetUserData() const; | ||||
| 
 | ||||
| 		void SetUserData(void* data); | ||||
| 		void			SetUserData(Any const& data); | ||||
| 
 | ||||
| 		void			SetName(String const& name); | ||||
| 
 | ||||
|  | @ -68,7 +68,7 @@ namespace kiwano | |||
| 
 | ||||
| 	private: | ||||
| 		bool	tracing_leak_; | ||||
| 		void*	user_data_; | ||||
| 		Any		user_data_; | ||||
| 		String*	name_; | ||||
| 
 | ||||
| 		const uint32_t id_; | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ public: | |||
| 
 | ||||
| 	virtual const char* what() const override | ||||
| 	{ | ||||
| 		return "bad and cast"; | ||||
| 		return "bad any_cast"; | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
|  | @ -60,12 +60,14 @@ public: | |||
| 
 | ||||
| 	template < | ||||
| 		typename _Ty, | ||||
| 		typename _Decayed = typename std::decay<_Ty>::type, | ||||
| 		typename... _Args | ||||
| 	> | ||||
| 	any(_Args&&... args) : storage_{} | ||||
| 	{ | ||||
| 		emplace<_Decayed>(std::forward<_Args>(args)...); | ||||
| 		using _Decayed = typename std::decay<_Ty>::type; | ||||
| 
 | ||||
| 		reset(); | ||||
| 		emplace_decayed<_Decayed>(std::forward<_Args>(args)...); | ||||
| 	} | ||||
| 
 | ||||
| 	any(const any& rhs) : storage_{} | ||||
|  | @ -99,13 +101,15 @@ public: | |||
| 	} | ||||
| 
 | ||||
| 	template < | ||||
| 		typename _Decayed, | ||||
| 		typename _Ty, | ||||
| 		typename... _Args | ||||
| 	> | ||||
| 	void emplace(_Args&&... args) | ||||
| 	{ | ||||
| 		using _Decayed = typename std::decay<_Ty>::type; | ||||
| 
 | ||||
| 		reset(); | ||||
| 		store<_Decayed>(decayed_is_small<_Decayed>{}, std::forward<_Args>(args)...); | ||||
| 		emplace_decayed<_Decayed>(std::forward<_Args>(args)...); | ||||
| 	} | ||||
| 
 | ||||
| 	void swap(any& rhs) noexcept | ||||
|  | @ -196,6 +200,15 @@ protected: | |||
| 		return storage_.small_.info_; | ||||
| 	} | ||||
| 
 | ||||
| 	template < | ||||
| 		typename _Decayed, | ||||
| 		typename... _Args | ||||
| 	> | ||||
| 	inline void emplace_decayed(_Args&&... args) | ||||
| 	{ | ||||
| 		store<_Decayed>(decayed_is_small<_Decayed>{}, std::forward<_Args>(args)...); | ||||
| 	} | ||||
| 
 | ||||
| 	template < | ||||
| 		typename _Decayed, | ||||
| 		typename... _Args | ||||
|  | @ -340,9 +353,9 @@ protected: | |||
| 		} | ||||
| 
 | ||||
| 		template <typename _Ty> | ||||
| 		static void* copy_impl(void* const ptr) noexcept | ||||
| 		static void* copy_impl(const void* const ptr) noexcept | ||||
| 		{ | ||||
| 			return ::new _Ty(*static_cast<_Ty*>(ptr)); | ||||
| 			return ::new _Ty(*static_cast<const _Ty*>(ptr)); | ||||
| 		} | ||||
| 
 | ||||
| 		destroy_func* destroy; | ||||
|  | @ -468,7 +481,9 @@ const _Ty* any_cast(const any* const a) noexcept | |||
| template <typename _Ty> | ||||
| _Ty any_cast(any& a) | ||||
| { | ||||
| 	const auto ptr = any_cast<std::decay<_Ty>::type>(&a); | ||||
| 	using _Decayed = typename std::decay<_Ty>::type; | ||||
| 
 | ||||
| 	const auto ptr = any_cast<_Decayed>(&a); | ||||
| 	if (!ptr) | ||||
| 	{ | ||||
| 		throw bad_any_cast{}; | ||||
|  | @ -479,7 +494,9 @@ _Ty any_cast(any& a) | |||
| template <typename _Ty> | ||||
| const _Ty any_cast(const any& a) | ||||
| { | ||||
| 	const auto ptr = any_cast<std::decay<_Ty>::type>(&a); | ||||
| 	using _Decayed = typename std::decay<_Ty>::type; | ||||
| 
 | ||||
| 	const auto ptr = any_cast<_Decayed>(&a); | ||||
| 	if (!ptr) | ||||
| 	{ | ||||
| 		throw bad_any_cast{}; | ||||
|  | @ -490,7 +507,9 @@ const _Ty any_cast(const any& a) | |||
| template <typename _Ty> | ||||
| _Ty any_cast(any&& a) | ||||
| { | ||||
| 	_Ty* ptr = a.cast_pointer<_Ty>(); | ||||
| 	using _Decayed = typename std::decay<_Ty>::type; | ||||
| 
 | ||||
| 	const auto ptr = any_cast<_Decayed>(&a); | ||||
| 	if (!ptr) | ||||
| 	{ | ||||
| 		throw bad_any_cast{}; | ||||
|  |  | |||
|  | @ -29,6 +29,7 @@ | |||
| 
 | ||||
| #include <kiwano/core/vector.hpp> | ||||
| #include <kiwano/core/string.hpp> | ||||
| #include <kiwano/core/any.hpp> | ||||
| #include <kiwano/core/intrusive_list.hpp> | ||||
| #include <kiwano/core/intrusive_ptr.hpp> | ||||
| #include <kiwano/core/noncopyable.hpp> | ||||
|  | @ -69,6 +70,8 @@ namespace kiwano | |||
| 	template <typename _FuncTy> | ||||
| 	using Function = kiwano::core::function<_FuncTy>; | ||||
| 
 | ||||
| 	using Any = kiwano::core::any; | ||||
| 
 | ||||
| 	using Json = kiwano::core::basic_json<kiwano::Map, kiwano::Vector, kiwano::String, | ||||
| 		int, double, bool, std::allocator>; | ||||
| } | ||||
|  |  | |||
|  | @ -34,13 +34,14 @@ | |||
| 
 | ||||
| #include <kiwano/core/vector.hpp> | ||||
| #include <kiwano/core/string.hpp> | ||||
| #include <kiwano/core/core.h> | ||||
| #include <kiwano/core/Function.hpp> | ||||
| #include <kiwano/core/any.hpp> | ||||
| #include <kiwano/core/function.hpp> | ||||
| #include <kiwano/core/intrusive_list.hpp> | ||||
| #include <kiwano/core/intrusive_ptr.hpp> | ||||
| #include <kiwano/core/noncopyable.hpp> | ||||
| #include <kiwano/core/singleton.hpp> | ||||
| #include <kiwano/core/basic_json.hpp> | ||||
| #include <kiwano/core/core.h> | ||||
| 
 | ||||
| 
 | ||||
| //
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue