diff options
Diffstat (limited to 'contrib/llvm-project/lldb/tools/lldb-mi/MICmdArgValListBase.cpp')
| -rw-r--r-- | contrib/llvm-project/lldb/tools/lldb-mi/MICmdArgValListBase.cpp | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/contrib/llvm-project/lldb/tools/lldb-mi/MICmdArgValListBase.cpp b/contrib/llvm-project/lldb/tools/lldb-mi/MICmdArgValListBase.cpp new file mode 100644 index 000000000000..bd175f3afe64 --- /dev/null +++ b/contrib/llvm-project/lldb/tools/lldb-mi/MICmdArgValListBase.cpp @@ -0,0 +1,209 @@ +//===-- MICmdArgValListBase.cpp ---------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +// In-house headers: +#include "MICmdArgValListBase.h" +#include "MICmdArgContext.h" +#include "MICmdArgValConsume.h" +#include "MICmdArgValFile.h" +#include "MICmdArgValNumber.h" +#include "MICmdArgValOptionLong.h" +#include "MICmdArgValOptionShort.h" +#include "MICmdArgValString.h" +#include "MICmdArgValThreadGrp.h" + +//++ +// Details: CMICmdArgValListBase constructor. +// Type: Method. +// Args: None. +// Return: None. +// Throws: None. +//-- +CMICmdArgValListBase::CMICmdArgValListBase() + : 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() { + // Tidy up + Destroy(); +} + +//++ +// Details: Tear down resources used by *this object. +// Type: Method. +// Args: None. +// Return: None. +// Throws: None. +//-- +void CMICmdArgValListBase::Destroy() { + // 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; +} |
