aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MICmdArgValListBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lldb-mi/MICmdArgValListBase.cpp')
-rw-r--r--tools/lldb-mi/MICmdArgValListBase.cpp221
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;
+}