blob: 9963920546563faaafdb124e44930fd6c1708642 [file] [log] [blame]
//===-- 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_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_ThreadGrp:
bValid = CMICmdArgValThreadGrp().IsArgThreadGrp( vrTxt );
break;
default:
return false;
}
return bValid;
}