forked from OSchip/llvm-project
377 lines
10 KiB
C++
377 lines
10 KiB
C++
//===-- 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();
|
|
}
|
|
}
|