1 //===-- MICmdArgValListBase.cpp ---------------------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
10 #include "MICmdArgValListBase.h"
11 #include "MICmdArgContext.h"
12 #include "MICmdArgValConsume.h"
13 #include "MICmdArgValFile.h"
14 #include "MICmdArgValNumber.h"
15 #include "MICmdArgValOptionLong.h"
16 #include "MICmdArgValOptionShort.h"
17 #include "MICmdArgValString.h"
18 #include "MICmdArgValThreadGrp.h"
21 // Details: CMICmdArgValListBase constructor.
27 CMICmdArgValListBase::CMICmdArgValListBase()
28 : m_eArgType(eArgValType_invalid) {}
31 // Details: CMICmdArgValListBase constructor.
33 // Args: vrArgName - (R) Argument's name to search by.
34 // vbMandatory - (R) True = Yes must be present, false = optional
36 // vbHandleByCmd - (R) True = Command processes *this option, false =
41 CMICmdArgValListBase::CMICmdArgValListBase(const CMIUtilString &vrArgName,
42 const bool vbMandatory,
43 const bool vbHandleByCmd)
44 : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd),
45 m_eArgType(eArgValType_invalid) {}
48 // Details: CMICmdArgValListBase constructor.
50 // Args: vrArgName - (R) Argument's name to search by.
51 // vbMandatory - (R) True = Yes must be present, false = optional
53 // vbHandleByCmd - (R) True = Command processes *this option, false =
55 // veType - (R) The type of argument to look for and create
56 // argument object of a certain type.
60 CMICmdArgValListBase::CMICmdArgValListBase(const CMIUtilString &vrArgName,
61 const bool vbMandatory,
62 const bool vbHandleByCmd,
63 const ArgValType_e veType)
64 : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd),
68 // Details: CMICmdArgValListBase destructor.
74 CMICmdArgValListBase::~CMICmdArgValListBase() {
80 // Details: Tear down resources used by *this object.
86 void CMICmdArgValListBase::Destroy() {
88 VecArgObjPtr_t::const_iterator it = m_argValue.begin();
89 while (it != m_argValue.end()) {
90 CMICmdArgValBase *pArgObj = *it;
100 // Details: Create an CMICmdArgValBase derived object matching the type
102 // and put the option or argument's value inside it.
104 // Args: vrTxt - (R) Text version the option or argument.
105 // veType - (R) The type of argument or option object to create.
106 // Return: CMICmdArgValBase * - Option object holding the value.
107 // - NULL = Functional failed.
111 CMICmdArgValListBase::CreationObj(const CMIUtilString &vrTxt,
112 const ArgValType_e veType) const {
113 CMICmdArgValBase *pOptionObj = nullptr;
115 case eArgValType_File:
116 pOptionObj = new CMICmdArgValFile();
118 case eArgValType_Consume:
119 pOptionObj = new CMICmdArgValConsume();
121 case eArgValType_Number:
122 pOptionObj = new CMICmdArgValNumber();
124 case eArgValType_OptionLong:
125 pOptionObj = new CMICmdArgValOptionLong();
127 case eArgValType_OptionShort:
128 pOptionObj = new CMICmdArgValOptionShort();
130 case eArgValType_String:
131 pOptionObj = new CMICmdArgValString();
133 case eArgValType_StringQuoted:
134 pOptionObj = new CMICmdArgValString(true, false, false);
136 case eArgValType_StringQuotedNumber:
137 pOptionObj = new CMICmdArgValString(true, true, false);
139 case eArgValType_StringQuotedNumberPath:
140 pOptionObj = new CMICmdArgValString(true, true, true);
142 case eArgValType_StringAnything:
143 pOptionObj = new CMICmdArgValString(true);
145 case eArgValType_ThreadGrp:
146 pOptionObj = new CMICmdArgValThreadGrp();
152 CMICmdArgContext argCntxt(vrTxt);
153 if (!pOptionObj->Validate(argCntxt))
160 // Details: Validate the option or argument is the correct type.
162 // Args: vrTxt - (R) Text version the option or argument.
163 // veType - (R) The type of value to expect.
164 // Return: bool - True = Yes expected type present, False = no.
167 bool CMICmdArgValListBase::IsExpectedCorrectType(
168 const CMIUtilString &vrTxt, const ArgValType_e veType) const {
171 case eArgValType_File:
172 bValid = CMICmdArgValFile().IsFilePath(vrTxt);
174 case eArgValType_Consume:
175 bValid = CMICmdArgValConsume().IsOk();
177 case eArgValType_Number:
178 bValid = CMICmdArgValNumber().IsArgNumber(vrTxt);
180 case eArgValType_OptionLong:
181 bValid = CMICmdArgValOptionLong().IsArgLongOption(vrTxt);
183 case eArgValType_OptionShort:
184 bValid = CMICmdArgValOptionShort().IsArgShortOption(vrTxt);
186 case eArgValType_String:
187 bValid = CMICmdArgValString().IsStringArg(vrTxt);
189 case eArgValType_StringQuoted:
190 bValid = CMICmdArgValString(true, false, false).IsStringArg(vrTxt);
192 case eArgValType_StringQuotedNumber:
193 bValid = CMICmdArgValString(true, true, false).IsStringArg(vrTxt);
195 case eArgValType_StringQuotedNumberPath:
196 bValid = CMICmdArgValString(true, true, true).IsStringArg(vrTxt);
198 case eArgValType_StringAnything:
199 bValid = CMICmdArgValString(true).IsStringArg(vrTxt);
201 case eArgValType_ThreadGrp:
202 bValid = CMICmdArgValThreadGrp().IsArgThreadGrp(vrTxt);