MyGUI  3.2.0
MyGUI_Any.cpp
Go to the documentation of this file.
00001 
00006 /*
00007     This file is part of MyGUI.
00008 
00009     MyGUI is free software: you can redistribute it and/or modify
00010     it under the terms of the GNU Lesser General Public License as published by
00011     the Free Software Foundation, either version 3 of the License, or
00012     (at your option) any later version.
00013 
00014     MyGUI is distributed in the hope that it will be useful,
00015     but WITHOUT ANY WARRANTY; without even the implied warranty of
00016     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017     GNU Lesser General Public License for more details.
00018 
00019     You should have received a copy of the GNU Lesser General Public License
00020     along with MyGUI.  If not, see <http://www.gnu.org/licenses/>.
00021 */
00022 
00023 #include "MyGUI_Precompiled.h"
00024 #include "MyGUI_Any.h"
00025 
00026 namespace MyGUI
00027 {
00028 
00029     Any::AnyEmpty Any::Null;
00030 
00031     Any::Any() :
00032         mContent(nullptr)
00033     {
00034     }
00035 
00036     Any::Any(const Any::AnyEmpty& value) :
00037         mContent(nullptr)
00038     {
00039     }
00040 
00041     Any::Any(const Any& other) :
00042         mContent(other.mContent ? other.mContent->clone() : nullptr)
00043     {
00044     }
00045 
00046     Any::~Any()
00047     {
00048         delete mContent;
00049     }
00050 
00051     Any& Any::swap(Any& rhs)
00052     {
00053         std::swap(mContent, rhs.mContent);
00054         return *this;
00055     }
00056 
00057     Any& Any::operator = (const Any::AnyEmpty& rhs)
00058     {
00059         delete mContent;
00060         mContent = nullptr;
00061         return *this;
00062     }
00063 
00064     Any& Any::operator = (const Any& rhs)
00065     {
00066         Any(rhs).swap(*this);
00067         return *this;
00068     }
00069 
00070     bool Any::empty() const
00071     {
00072         return !mContent;
00073     }
00074 
00075 #ifndef MYGUI_RTTI_DISABLE_TYPE_INFO
00076     const std::type_info& Any::getType() const
00077     {
00078         return mContent ? mContent->getType() : typeid(void);
00079     }
00080 #endif
00081 
00082     void* Any::castUnsafe() const
00083     {
00084         return mContent ? static_cast<Any::Holder<void*> *>(this->mContent)->held : nullptr;
00085     }
00086 
00087 } // namespace MyGUI