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