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,13 +36,13 @@ 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);
|
||||
void SetName(String const& name);
|
||||
|
||||
String DumpObject();
|
||||
String DumpObject();
|
||||
|
||||
inline String GetName() const { if (name_) return *name_; return String(); }
|
||||
|
||||
|
|
@ -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