71 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include <nana/any.hpp>
 | 
						|
 | 
						|
 | 
						|
namespace nana
 | 
						|
{
 | 
						|
 | 
						|
	//class any
 | 
						|
		//struct super_type
 | 
						|
			any::super_type::~super_type(){}
 | 
						|
			
 | 
						|
			any::super_type& any::super_type::operator=(const super_type &rhs)
 | 
						|
			{
 | 
						|
				return assign(rhs);
 | 
						|
			}
 | 
						|
		//end struct super_type
 | 
						|
 | 
						|
		any::any()
 | 
						|
			:super_(nullptr)
 | 
						|
		{}
 | 
						|
		
 | 
						|
		any::any(const any& rhs)
 | 
						|
			:super_(rhs.super_ ? rhs.super_->clone() : nullptr)
 | 
						|
		{}
 | 
						|
 | 
						|
		any::any(any&& r)
 | 
						|
			:super_(r.super_)
 | 
						|
		{
 | 
						|
			r.super_ = nullptr;
 | 
						|
		}
 | 
						|
		
 | 
						|
		any::~any()
 | 
						|
		{
 | 
						|
			delete super_;	
 | 
						|
		}
 | 
						|
		
 | 
						|
		any& any::operator=(const any& rhs)
 | 
						|
		{
 | 
						|
			if(this != &rhs)
 | 
						|
			{
 | 
						|
				delete super_;
 | 
						|
				super_ = (rhs.super_ ? rhs.super_->clone() : nullptr);
 | 
						|
			}
 | 
						|
			return *this;	
 | 
						|
		}
 | 
						|
 | 
						|
		any& any::operator=(any&& r)
 | 
						|
		{
 | 
						|
			if(this != &r)
 | 
						|
			{
 | 
						|
				delete super_;
 | 
						|
				super_ = r.super_;
 | 
						|
				r.super_ = nullptr;
 | 
						|
			}
 | 
						|
			return *this;
 | 
						|
		}
 | 
						|
		
 | 
						|
		bool any::same(const any &rhs) const
 | 
						|
		{
 | 
						|
			if(this != &rhs)
 | 
						|
			{
 | 
						|
				if(super_ && rhs.super_)
 | 
						|
					return super_->same(*rhs.super_);
 | 
						|
				else if(super_ || rhs.super_)
 | 
						|
					return false;
 | 
						|
			}
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
	//end class any
 | 
						|
}//end namespace nana
 | 
						|
 |