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