aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MIUtilVariant.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MIUtilVariant.cpp')
-rw-r--r--tools/lldb-mi/MIUtilVariant.cpp392
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();
+ }
+}
+