1 //===-- MICmdArgValNumber.cpp -----------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
11 #include "MICmdArgValNumber.h"
12 #include "MICmdArgContext.h"
15 //------------------------------------------------------------------------------------
16 // Details: CMICmdArgValNumber constructor.
22 CMICmdArgValNumber::CMICmdArgValNumber()
23 : m_nNumberFormatMask(CMICmdArgValNumber::eArgValNumberFormat_Decimal),
27 //------------------------------------------------------------------------------------
28 // Details: CMICmdArgValNumber constructor.
30 // Args: vrArgName - (R) Argument's name to search by.
31 // vbMandatory - (R) True = Yes must be present, false =
33 // vbHandleByCmd - (R) True = Command processes *this option,
34 // false = not handled.
35 // vnNumberFormatMask - (R) Mask of the number formats. (Dflt =
36 // CMICmdArgValNumber::eArgValNumberFormat_Decimal)
40 CMICmdArgValNumber::CMICmdArgValNumber(
41 const CMIUtilString &vrArgName, const bool vbMandatory,
42 const bool vbHandleByCmd,
44 vnNumberFormatMask /* = CMICmdArgValNumber::eArgValNumberFormat_Decimal*/)
45 : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd),
46 m_nNumberFormatMask(vnNumberFormatMask), m_nNumber(0) {}
49 //------------------------------------------------------------------------------------
50 // Details: CMICmdArgValNumber destructor.
56 CMICmdArgValNumber::~CMICmdArgValNumber() {}
59 //------------------------------------------------------------------------------------
60 // Details: Parse the command's argument options string and try to extract the
62 // argument is looking for.
64 // Args: vwArgContext - (RW) The command's argument options string.
65 // Return: MIstatus::success - Functional succeeded.
66 // MIstatus::failure - Functional failed.
69 bool CMICmdArgValNumber::Validate(CMICmdArgContext &vwArgContext) {
70 if (vwArgContext.IsEmpty())
71 return m_bMandatory ? MIstatus::failure : MIstatus::success;
73 if (vwArgContext.GetNumberArgsPresent() == 1) {
74 const CMIUtilString &rArg(vwArgContext.GetArgsLeftToParse());
75 if (IsArgNumber(rArg) && ExtractNumber(rArg)) {
78 m_argValue = GetNumber();
79 vwArgContext.RemoveArg(rArg);
80 return MIstatus::success;
82 return MIstatus::failure;
85 // More than one option...
86 const CMIUtilString::VecString_t vecOptions(vwArgContext.GetArgs());
87 CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
88 while (it != vecOptions.end()) {
89 const CMIUtilString &rArg(*it);
90 if (IsArgNumber(rArg) && ExtractNumber(rArg)) {
93 if (vwArgContext.RemoveArg(rArg)) {
95 m_argValue = GetNumber();
96 return MIstatus::success;
98 return MIstatus::failure;
105 return MIstatus::failure;
109 //------------------------------------------------------------------------------------
110 // Details: Examine the string and determine if it is a valid string type
113 // Args: vrTxt - (R) Some text.
114 // Return: bool - True = yes valid arg, false = no.
117 bool CMICmdArgValNumber::IsArgNumber(const CMIUtilString &vrTxt) const {
118 const bool bFormatDecimal(m_nNumberFormatMask &
119 CMICmdArgValNumber::eArgValNumberFormat_Decimal);
120 const bool bFormatHexadecimal(
121 m_nNumberFormatMask &
122 CMICmdArgValNumber::eArgValNumberFormat_Hexadecimal);
124 // Look for --someLongOption
125 if (std::string::npos != vrTxt.find("--"))
128 if (bFormatDecimal && vrTxt.IsNumber())
131 if (bFormatHexadecimal && vrTxt.IsHexadecimalNumber())
138 //------------------------------------------------------------------------------------
139 // Details: Extract the thread group number from the thread group argument.
141 // Args: vrTxt - (R) Some text.
142 // Return: MIstatus::success - Functional succeeded.
143 // MIstatus::failure - Functional failed.
146 bool CMICmdArgValNumber::ExtractNumber(const CMIUtilString &vrTxt) {
148 bool bOk = vrTxt.ExtractNumber(nNumber);
150 m_nNumber = static_cast<MIint64>(nNumber);
157 //------------------------------------------------------------------------------------
158 // Details: Retrieve the thread group ID found in the argument.
161 // Return: MIuint - Thread group ID.
164 MIint64 CMICmdArgValNumber::GetNumber() const { return m_nNumber; }