| //===-- 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(); |
| } |
| } |