llvm-project/lldb/tools/lldb-mi/MIUtilVariant.cpp

393 lines
11 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.
//
//===----------------------------------------------------------------------===//
//++
// File: MIUtilVariant.cpp
//
// Overview: CMIUtilVariant implementation.
//
// Environment: Compilers: Visual C++ 12.
// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
// Libraries: See MIReadmetxt.
//
// Gotchas: See CMIUtilVariant class description.
//
// Copyright: None.
//--
// In-house headers:
#include "MIUtilVariant.h"
//++ ------------------------------------------------------------------------------------
// Details: CDataObjectBase constructor.
// Type: Method.
// Args: None.
// Return: None.
// Throws: None.
//--
CMIUtilVariant::CDataObjectBase::CDataObjectBase(void)
{
}
//++ ------------------------------------------------------------------------------------
// 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(void)
{
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(void)
{
// 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(void) 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(void)
{
// 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(void)
: 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(void)
{
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(void)
{
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();
}
}