diff options
Diffstat (limited to 'tools/lldb-mi/MIUtilVariant.cpp')
-rw-r--r-- | tools/lldb-mi/MIUtilVariant.cpp | 392 |
1 files changed, 392 insertions, 0 deletions
diff --git a/tools/lldb-mi/MIUtilVariant.cpp b/tools/lldb-mi/MIUtilVariant.cpp new file mode 100644 index 000000000000..1c9ea1c9697f --- /dev/null +++ b/tools/lldb-mi/MIUtilVariant.cpp @@ -0,0 +1,392 @@ +//===-- 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(); + } +} + |