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