88 lines
1.5 KiB
C++
88 lines
1.5 KiB
C++
/**
|
|
* Any
|
|
* Nana C++ Library(http://www.nanapro.org)
|
|
* Copyright(C) 2003-2016 Jinhao(cnjinhao@hotmail.com)
|
|
*
|
|
* Distributed under the Boost Software License, Version 1.0.
|
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
|
* http://www.boost.org/LICENSE_1_0.txt)
|
|
*
|
|
* @file nana/any.cpp
|
|
*
|
|
* @brief An implementation of experimental library any of C++ standard(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html#any)
|
|
*/
|
|
|
|
#include <nana/any.hpp>
|
|
#include <utility>
|
|
|
|
namespace nana
|
|
{
|
|
//constructors and destructor
|
|
any::any() noexcept
|
|
: content_(nullptr)
|
|
{
|
|
}
|
|
|
|
any::any(const any& other)
|
|
: content_(other.content_ ? other.content_->clone() : nullptr)
|
|
{}
|
|
|
|
any::any(any && other) noexcept
|
|
: content_(other.content_)
|
|
{
|
|
other.content_ = nullptr;
|
|
}
|
|
|
|
any::~any()
|
|
{
|
|
delete content_;
|
|
}
|
|
|
|
//assignments
|
|
any& any::operator=(const any& other)
|
|
{
|
|
if (this != &other)
|
|
any(other).swap(*this);
|
|
|
|
return *this;
|
|
}
|
|
|
|
any& any::operator=(any&& other) noexcept
|
|
{
|
|
if (this != &other)
|
|
{
|
|
other.swap(*this);
|
|
other.clear();
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
//modifiers
|
|
void any::clear() noexcept
|
|
{
|
|
if (content_)
|
|
{
|
|
auto cnt = content_;
|
|
content_ = nullptr;
|
|
delete cnt;
|
|
}
|
|
}
|
|
|
|
void any::swap(any& other) noexcept
|
|
{
|
|
std::swap(content_, other.content_);
|
|
}
|
|
|
|
//observers
|
|
bool any::empty() const noexcept
|
|
{
|
|
return (nullptr == content_);
|
|
}
|
|
|
|
const std::type_info& any::type() const noexcept
|
|
{
|
|
return (content_ ? content_->type() : typeid(void));
|
|
}
|
|
}//end namespace nana
|
|
|