aboutsummaryrefslogblamecommitdiff
path: root/tools/lldb-mi/MIUtilVariant.cpp
blob: c5e864332420be6e83f02f35c909a22d189bf31d (plain) (tree)
1
2
3
4
5
6
7
8
9
10







                                                                                

                    
                          

                                                                                         




                                        
    
                                                  



                                                                                         




                                             
    
                                                                                
 
                      


                                                                                         




                                             
    
                                                                          
 
                      


                                                                                         




                                               
    
                                                                            
 
                       


                                                                                         




                                       
    
                                                   
 
              


                                                                                         




                                            
    
                                                                                                           
 

                  


                                                                                         




                                               
    
                                                                                                       
 


                       


                                                                                         




                                                          
    
                                 
                                                   
 

                                                             


                                                                                         




                                                                                                                     
    
    
                                                          
 

                                                       


                                                                                         




                                                   
    

                                                                     
 

                            


                                                                                         




                                                       
    
    
                                          
 
                                         






                                                                                         





                                           
    
                                                                                             
 


                         


                                                                                         





                                           
    
                                                                                       
 


                         


                                                                                         





                                               
    
                                                                                         
 



                          


                                                                                         





                                           
    
                                                                                                                           
 



                         


                                                                                         





                                               
    
                                                                                                                       
 




                          






                                                                                         




                                       
    
                                
                            



                                                                                         




                                            
    

                                                             
 

                         
 
                  


                                                                                         




                                            
    

                                                       
 

                         
 
                  


                                                                                         




                                               
    

                                                         
 

                          
 

                       


                                                                                         




                                      
    
                                 
 
              


                                                                                         




                                           
    
                                                                        
 

                         
 

                  


                                                                                         




                                               
    
                                                                    
 

                          
 


                       


                                                                                         




                                                       
    
    
                         
 


                                 


                                                                                         




                                                                     
    

                                                   
 
              
 




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