| //===-- MIUtilVariant.cpp----------------------------------------*- C++ -*-===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // In-house headers: | |
| #include "MIUtilVariant.h" | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObjectBase constructor. | |
| // Type: Method. | |
| // Args: None. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CDataObjectBase::CDataObjectBase() {} | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObjectBase copy constructor. | |
| // Type: Method. | |
| // Args: vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CDataObjectBase::CDataObjectBase( | |
| const CDataObjectBase &vrOther) { | |
| MIunused(vrOther); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObjectBase copy constructor. | |
| // Type: Method. | |
| // Args: vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CDataObjectBase::CDataObjectBase(CDataObjectBase &vrOther) { | |
| MIunused(vrOther); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObjectBase move constructor. | |
| // Type: Method. | |
| // Args: vrwOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CDataObjectBase::CDataObjectBase(CDataObjectBase &&vrwOther) { | |
| MIunused(vrwOther); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObjectBase destructor. | |
| // Type: Overrideable. | |
| // Args: None. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CDataObjectBase::~CDataObjectBase() { Destroy(); } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObjectBase copy assignment. | |
| // Type: Method. | |
| // Args: vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CDataObjectBase &CMIUtilVariant::CDataObjectBase:: | |
| operator=(const CDataObjectBase &vrOther) { | |
| Copy(vrOther); | |
| return *this; | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObjectBase move assignment. | |
| // Type: Method. | |
| // Args: vrwOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CDataObjectBase &CMIUtilVariant::CDataObjectBase:: | |
| operator=(CDataObjectBase &&vrwOther) { | |
| Copy(vrwOther); | |
| vrwOther.Destroy(); | |
| return *this; | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: Create a new copy of *this class. | |
| // Type: Overrideable. | |
| // Args: None. | |
| // Return: CDataObjectBase * - Pointer to a new object. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CDataObjectBase * | |
| CMIUtilVariant::CDataObjectBase::CreateCopyOfSelf() { | |
| // Override to implement copying of variant's data object | |
| return new CDataObjectBase(); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: Determine if *this object is a derived from CDataObjectBase. | |
| // Type: Overrideable. | |
| // Args: None. | |
| // Return: bool - True = *this is derived from CDataObjectBase, false = | |
| // *this is instance of the this base class. | |
| // Throws: None. | |
| //-- | |
| bool CMIUtilVariant::CDataObjectBase::GetIsDerivedClass() const { | |
| // Override to in the derived class and return true | |
| return false; | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: Perform a bitwise copy of *this object. | |
| // Type: Overrideable. | |
| // Args: vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| void CMIUtilVariant::CDataObjectBase::Copy(const CDataObjectBase &vrOther) { | |
| // Override to implement | |
| MIunused(vrOther); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: Release any resources used by *this object. | |
| // Type: Overrideable. | |
| // Args: None. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| void CMIUtilVariant::CDataObjectBase::Destroy() { | |
| // Do nothing - override to implement | |
| } | |
| //--------------------------------------------------------------------------------------- | |
| //--------------------------------------------------------------------------------------- | |
| //--------------------------------------------------------------------------------------- | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObject copy constructor. | |
| // Type: Method. | |
| // Args: T - The object's type. | |
| // vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| template <typename T> | |
| CMIUtilVariant::CDataObject<T>::CDataObject(const CDataObject &vrOther) { | |
| if (this == &vrOther) | |
| return; | |
| Copy(vrOther); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObject copy constructor. | |
| // Type: Method. | |
| // Args: T - The object's type. | |
| // vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| template <typename T> | |
| CMIUtilVariant::CDataObject<T>::CDataObject(CDataObject &vrOther) { | |
| if (this == &vrOther) | |
| return; | |
| Copy(vrOther); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObject move constructor. | |
| // Type: Method. | |
| // Args: T - The object's type. | |
| // vrwOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| template <typename T> | |
| CMIUtilVariant::CDataObject<T>::CDataObject(CDataObject &&vrwOther) { | |
| if (this == &vrwOther) | |
| return; | |
| Copy(vrwOther); | |
| vrwOther.Destroy(); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObject copy assignment. | |
| // Type: Method. | |
| // Args: T - The object's type. | |
| // vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| template <typename T> | |
| CMIUtilVariant::CDataObject<T> &CMIUtilVariant::CDataObject<T>:: | |
| operator=(const CDataObject &vrOther) { | |
| if (this == &vrOther) | |
| return *this; | |
| Copy(vrOther); | |
| return *this; | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CDataObject move assignment. | |
| // Type: Method. | |
| // Args: T - The object's type. | |
| // vrwOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| template <typename T> | |
| CMIUtilVariant::CDataObject<T> &CMIUtilVariant::CDataObject<T>:: | |
| operator=(CDataObject &&vrwOther) { | |
| if (this == &vrwOther) | |
| return *this; | |
| Copy(vrwOther); | |
| vrwOther.Destroy(); | |
| return *this; | |
| } | |
| //--------------------------------------------------------------------------------------- | |
| //--------------------------------------------------------------------------------------- | |
| //--------------------------------------------------------------------------------------- | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CMIUtilVariant constructor. | |
| // Type: Method. | |
| // Args: None. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CMIUtilVariant() : m_pDataObject(nullptr) {} | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CMIUtilVariant copy constructor. | |
| // Type: Method. | |
| // Args: vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CMIUtilVariant(const CMIUtilVariant &vrOther) | |
| : m_pDataObject(nullptr) { | |
| if (this == &vrOther) | |
| return; | |
| Copy(vrOther); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CMIUtilVariant copy constructor. | |
| // Type: Method. | |
| // Args: vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CMIUtilVariant(CMIUtilVariant &vrOther) | |
| : m_pDataObject(nullptr) { | |
| if (this == &vrOther) | |
| return; | |
| Copy(vrOther); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CMIUtilVariant move constructor. | |
| // Type: Method. | |
| // Args: vrwOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::CMIUtilVariant(CMIUtilVariant &&vrwOther) | |
| : m_pDataObject(nullptr) { | |
| if (this == &vrwOther) | |
| return; | |
| Copy(vrwOther); | |
| vrwOther.Destroy(); | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CMIUtilVariant destructor. | |
| // Type: Method. | |
| // Args: None. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant::~CMIUtilVariant() { Destroy(); } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CMIUtilVariant copy assignment. | |
| // Type: Method. | |
| // Args: vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant &CMIUtilVariant::operator=(const CMIUtilVariant &vrOther) { | |
| if (this == &vrOther) | |
| return *this; | |
| Copy(vrOther); | |
| return *this; | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: CMIUtilVariant move assignment. | |
| // Type: Method. | |
| // Args: vrwOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| CMIUtilVariant &CMIUtilVariant::operator=(CMIUtilVariant &&vrwOther) { | |
| if (this == &vrwOther) | |
| return *this; | |
| Copy(vrwOther); | |
| vrwOther.Destroy(); | |
| return *this; | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: Release the resources used by *this object. | |
| // Type: Method. | |
| // Args: None. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| void CMIUtilVariant::Destroy() { | |
| if (m_pDataObject != nullptr) | |
| delete m_pDataObject; | |
| m_pDataObject = nullptr; | |
| } | |
| //++ | |
| //------------------------------------------------------------------------------------ | |
| // Details: Bitwise copy another data object to *this variant object. | |
| // Type: Method. | |
| // Args: vrOther - (R) The other object. | |
| // Return: None. | |
| // Throws: None. | |
| //-- | |
| void CMIUtilVariant::Copy(const CMIUtilVariant &vrOther) { | |
| Destroy(); | |
| if (vrOther.m_pDataObject != nullptr) { | |
| m_pDataObject = vrOther.m_pDataObject->CreateCopyOfSelf(); | |
| } | |
| } |