diff options
Diffstat (limited to 'tools/lldb-mi/MICmdArgValListBase.cpp')
-rw-r--r-- | tools/lldb-mi/MICmdArgValListBase.cpp | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/tools/lldb-mi/MICmdArgValListBase.cpp b/tools/lldb-mi/MICmdArgValListBase.cpp new file mode 100644 index 000000000000..37b729e42741 --- /dev/null +++ b/tools/lldb-mi/MICmdArgValListBase.cpp @@ -0,0 +1,221 @@ +//===-- MICmdArgValListBase.cpp ---------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +//++ +// File: MICmdArgValListBase.cpp +// +// Overview: CMICmdArgValListBase implementation. +// +// Environment: Compilers: Visual C++ 12. +// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 +// Libraries: See MIReadmetxt. +// +// Copyright: None. +//-- + +// In-house headers: +#include "MICmdArgValListBase.h" +#include "MICmdArgContext.h" +#include "MICmdArgValFile.h" +#include "MICmdArgValNumber.h" +#include "MICmdArgValOptionLong.h" +#include "MICmdArgValOptionShort.h" +#include "MICmdArgValString.h" +#include "MICmdArgValThreadGrp.h" +#include "MICmdArgValConsume.h" + +//++ ------------------------------------------------------------------------------------ +// Details: CMICmdArgValListBase constructor. +// Type: Method. +// Args: None. +// Return: None. +// Throws: None. +//-- +CMICmdArgValListBase::CMICmdArgValListBase( void ) +: m_eArgType( eArgValType_invalid ) +{ +} + +//++ ------------------------------------------------------------------------------------ +// Details: CMICmdArgValListBase constructor. +// Type: Method. +// Args: vrArgName - (R) Argument's name to search by. +// vbMandatory - (R) True = Yes must be present, false = optional argument. +// vbHandleByCmd - (R) True = Command processes *this option, false = not handled. +// Return: None. +// Throws: None. +//-- +CMICmdArgValListBase::CMICmdArgValListBase( const CMIUtilString & vrArgName, const bool vbMandatory, const bool vbHandleByCmd ) +: CMICmdArgValBaseTemplate( vrArgName, vbMandatory, vbHandleByCmd ) +, m_eArgType( eArgValType_invalid ) +{ +} + +//++ ------------------------------------------------------------------------------------ +// Details: CMICmdArgValListBase constructor. +// Type: Method. +// Args: vrArgName - (R) Argument's name to search by. +// vbMandatory - (R) True = Yes must be present, false = optional argument. +// vbHandleByCmd - (R) True = Command processes *this option, false = not handled. +// veType - (R) The type of argument to look for and create argument object of a certain type. +// Return: None. +// Throws: None. +//-- +CMICmdArgValListBase::CMICmdArgValListBase( const CMIUtilString & vrArgName, const bool vbMandatory, const bool vbHandleByCmd, const ArgValType_e veType ) +: CMICmdArgValBaseTemplate( vrArgName, vbMandatory, vbHandleByCmd ) +, m_eArgType( veType ) +{ +} + +//++ ------------------------------------------------------------------------------------ +// Details: CMICmdArgValListBase destructor. +// Type: Overridden. +// Args: None. +// Return: None. +// Throws: None. +//-- +CMICmdArgValListBase::~CMICmdArgValListBase( void ) +{ + // Tidy up + Destroy(); +} + +//++ ------------------------------------------------------------------------------------ +// Details: Tear down resources used by *this object. +// Type: Method. +// Args: None. +// Return: None. +// Throws: None. +//-- +void CMICmdArgValListBase::Destroy( void ) +{ + // Tidy up + VecArgObjPtr_t::const_iterator it = m_argValue.begin(); + while( it != m_argValue.end() ) + { + CMICmdArgValBase * pArgObj = *it; + delete pArgObj; + + // Next + ++it; + } + m_argValue.clear(); +} + +//++ ------------------------------------------------------------------------------------ +// Details: Create an CMICmdArgValBase derived object matching the type specified +// and put the option or argument's value inside it. +// Type: Method. +// Args: vrTxt - (R) Text version the option or argument. +// veType - (R) The type of argument or option object to create. +// Return: CMICmdArgValBase * - Option object holding the value. +// - NULL = Functional failed. +// Throws: None. +//-- +CMICmdArgValBase * CMICmdArgValListBase::CreationObj( const CMIUtilString & vrTxt, const ArgValType_e veType ) const +{ + CMICmdArgValBase * pOptionObj = nullptr; + switch( veType ) + { + case eArgValType_File: + pOptionObj = new CMICmdArgValFile(); + break; + case eArgValType_Consume: + pOptionObj = new CMICmdArgValConsume(); + break; + case eArgValType_Number: + pOptionObj = new CMICmdArgValNumber(); + break; + case eArgValType_OptionLong: + pOptionObj = new CMICmdArgValOptionLong(); + break; + case eArgValType_OptionShort: + pOptionObj = new CMICmdArgValOptionShort(); + break; + case eArgValType_String: + pOptionObj = new CMICmdArgValString(); + break; + case eArgValType_StringQuoted: + pOptionObj = new CMICmdArgValString( true, false, false ); + break; + case eArgValType_StringQuotedNumber: + pOptionObj = new CMICmdArgValString( true, true, false ); + break; + case eArgValType_StringQuotedNumberPath: + pOptionObj = new CMICmdArgValString( true, true, true ); + break; + case eArgValType_StringAnything: + pOptionObj = new CMICmdArgValString( true ); + break; + case eArgValType_ThreadGrp: + pOptionObj = new CMICmdArgValThreadGrp(); + break; + default: + return nullptr; + } + + CMICmdArgContext argCntxt( vrTxt ); + if( !pOptionObj->Validate( argCntxt ) ) + return nullptr; + + return pOptionObj; +} + +//++ ------------------------------------------------------------------------------------ +// Details: Validate the option or argument is the correct type. +// Type: Method. +// Args: vrTxt - (R) Text version the option or argument. +// veType - (R) The type of value to expect. +// Return: bool - True = Yes expected type present, False = no. +// Throws: None. +//-- +bool CMICmdArgValListBase::IsExpectedCorrectType( const CMIUtilString & vrTxt, const ArgValType_e veType ) const +{ + bool bValid = false; + switch( veType ) + { + case eArgValType_File: + bValid = CMICmdArgValFile().IsFilePath( vrTxt ); + break; + case eArgValType_Consume: + bValid = CMICmdArgValConsume().IsOk(); + break; + case eArgValType_Number: + bValid = CMICmdArgValNumber().IsArgNumber( vrTxt ); + break; + case eArgValType_OptionLong: + bValid = CMICmdArgValOptionLong().IsArgLongOption( vrTxt ); + break; + case eArgValType_OptionShort: + bValid = CMICmdArgValOptionShort().IsArgShortOption( vrTxt ); + break; + case eArgValType_String: + bValid = CMICmdArgValString().IsStringArg( vrTxt ); + break; + case eArgValType_StringQuoted: + bValid = CMICmdArgValString( true, false, false ).IsStringArg( vrTxt ); + break; + case eArgValType_StringQuotedNumber: + bValid = CMICmdArgValString( true, true, false ).IsStringArg( vrTxt ); + break; + case eArgValType_StringQuotedNumberPath: + bValid = CMICmdArgValString( true, true, true ).IsStringArg( vrTxt ); + break; + case eArgValType_StringAnything: + bValid = CMICmdArgValString( true ).IsStringArg( vrTxt ); + break; + case eArgValType_ThreadGrp: + bValid = CMICmdArgValThreadGrp().IsArgThreadGrp( vrTxt ); + break; + default: + return false; + } + + return bValid; +} |