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"
14 //++ ------------------------------------------------------------------------------------
15 // Details: CMICmdArgValNumber constructor.
21 CMICmdArgValNumber::CMICmdArgValNumber(void)
22 : 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 = optional argument.
32 // vbHandleByCmd - (R) True = Command processes *this option, false = not handled.
33 // vnNumberFormatMask - (R) Mask of the number formats. (Dflt = CMICmdArgValNumber::eArgValNumberFormat_Decimal)
37 CMICmdArgValNumber::CMICmdArgValNumber(const CMIUtilString &vrArgName, const bool vbMandatory, const bool vbHandleByCmd,
38 const MIuint vnNumberFormatMask /* = CMICmdArgValNumber::eArgValNumberFormat_Decimal*/)
39 : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd)
40 , m_nNumberFormatMask(vnNumberFormatMask)
45 //++ ------------------------------------------------------------------------------------
46 // Details: CMICmdArgValNumber destructor.
52 CMICmdArgValNumber::~CMICmdArgValNumber(void)
56 //++ ------------------------------------------------------------------------------------
57 // Details: Parse the command's argument options string and try to extract the value *this
58 // argument is looking for.
60 // Args: vwArgContext - (RW) The command's argument options string.
61 // Return: MIstatus::success - Functional succeeded.
62 // MIstatus::failure - Functional failed.
66 CMICmdArgValNumber::Validate(CMICmdArgContext &vwArgContext)
68 if (vwArgContext.IsEmpty())
69 return m_bMandatory ? MIstatus::failure : MIstatus::success;
71 if (vwArgContext.GetNumberArgsPresent() == 1)
73 const CMIUtilString &rArg(vwArgContext.GetArgsLeftToParse());
74 if (IsArgNumber(rArg) && ExtractNumber(rArg))
78 m_argValue = GetNumber();
79 vwArgContext.RemoveArg(rArg);
80 return MIstatus::success;
83 return MIstatus::failure;
86 // More than one option...
87 const CMIUtilString::VecString_t vecOptions(vwArgContext.GetArgs());
88 CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
89 while (it != vecOptions.end())
91 const CMIUtilString &rArg(*it);
92 if (IsArgNumber(rArg) && ExtractNumber(rArg))
96 if (vwArgContext.RemoveArg(rArg))
99 m_argValue = GetNumber();
100 return MIstatus::success;
103 return MIstatus::failure;
110 return MIstatus::failure;
113 //++ ------------------------------------------------------------------------------------
114 // Details: Examine the string and determine if it is a valid string type argument.
116 // Args: vrTxt - (R) Some text.
117 // Return: bool - True = yes valid arg, false = no.
121 CMICmdArgValNumber::IsArgNumber(const CMIUtilString &vrTxt) const
123 const bool bFormatDecimal(m_nNumberFormatMask & CMICmdArgValNumber::eArgValNumberFormat_Decimal);
124 const bool bFormatHexadecimal(m_nNumberFormatMask & CMICmdArgValNumber::eArgValNumberFormat_Hexadecimal);
126 // Look for --someLongOption
127 if (std::string::npos != vrTxt.find("--"))
130 if (bFormatDecimal && vrTxt.IsNumber())
133 if (bFormatHexadecimal && vrTxt.IsHexadecimalNumber())
139 //++ ------------------------------------------------------------------------------------
140 // Details: Extract the thread group number from the thread group argument.
142 // Args: vrTxt - (R) Some text.
143 // Return: MIstatus::success - Functional succeeded.
144 // MIstatus::failure - Functional failed.
148 CMICmdArgValNumber::ExtractNumber(const CMIUtilString &vrTxt)
151 bool bOk = vrTxt.ExtractNumber(nNumber);
154 m_nNumber = static_cast<MIint64>(nNumber);
160 //++ ------------------------------------------------------------------------------------
161 // Details: Retrieve the thread group ID found in the argument.
164 // Return: MIuint - Thread group ID.
168 CMICmdArgValNumber::GetNumber(void) const