]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/tools/lldb-mi/MICmdArgValNumber.cpp
Import Annapurna Labs Alpine HAL to sys/contrib/
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / tools / lldb-mi / MICmdArgValNumber.cpp
1 //===-- MICmdArgValNumber.cpp -----------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 //++
11 // File:        MICmdArgValNumber.cpp
12 //
13 // Overview:    CMICmdArgValNumber implementation.
14 //
15 // Environment: Compilers:  Visual C++ 12.
16 //                          gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
17 //              Libraries:  See MIReadmetxt.
18 //
19 // Copyright:   None.
20 //--
21
22 // In-house headers:
23 #include "MICmdArgValNumber.h"
24 #include "MICmdArgContext.h"
25
26 //++ ------------------------------------------------------------------------------------
27 // Details: CMICmdArgValNumber constructor.
28 // Type:    Method.
29 // Args:    None.
30 // Return:  None.
31 // Throws:  None.
32 //--
33 CMICmdArgValNumber::CMICmdArgValNumber(void)
34     : m_nNumber(0)
35 {
36 }
37
38 //++ ------------------------------------------------------------------------------------
39 // Details: CMICmdArgValNumber constructor.
40 // Type:    Method.
41 // Args:    vrArgName       - (R) Argument's name to search by.
42 //          vbMandatory     - (R) True = Yes must be present, false = optional argument.
43 //          vbHandleByCmd   - (R) True = Command processes *this option, false = not handled.
44 // Return:  None.
45 // Throws:  None.
46 //--
47 CMICmdArgValNumber::CMICmdArgValNumber(const CMIUtilString &vrArgName, const bool vbMandatory, const bool vbHandleByCmd)
48     : CMICmdArgValBaseTemplate(vrArgName, vbMandatory, vbHandleByCmd)
49     , m_nNumber(0)
50 {
51 }
52
53 //++ ------------------------------------------------------------------------------------
54 // Details: CMICmdArgValNumber destructor.
55 // Type:    Overridden.
56 // Args:    None.
57 // Return:  None.
58 // Throws:  None.
59 //--
60 CMICmdArgValNumber::~CMICmdArgValNumber(void)
61 {
62 }
63
64 //++ ------------------------------------------------------------------------------------
65 // Details: Parse the command's argument options string and try to extract the value *this
66 //          argument is looking for.
67 // Type:    Overridden.
68 // Args:    vwArgContext    - (RW) The command's argument options string.
69 // Return:  MIstatus::success - Functional succeeded.
70 //          MIstatus::failure - Functional failed.
71 // Throws:  None.
72 //--
73 bool
74 CMICmdArgValNumber::Validate(CMICmdArgContext &vwArgContext)
75 {
76     if (vwArgContext.IsEmpty())
77         return MIstatus::success;
78
79     if (vwArgContext.GetNumberArgsPresent() == 1)
80     {
81         const CMIUtilString &rArg(vwArgContext.GetArgsLeftToParse());
82         if (IsArgNumber(rArg) && ExtractNumber(rArg))
83         {
84             m_bFound = true;
85             m_bValid = true;
86             m_argValue = GetNumber();
87             vwArgContext.RemoveArg(rArg);
88             return MIstatus::success;
89         }
90         else
91             return MIstatus::failure;
92     }
93
94     // More than one option...
95     const CMIUtilString::VecString_t vecOptions(vwArgContext.GetArgs());
96     CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
97     while (it != vecOptions.end())
98     {
99         const CMIUtilString &rArg(*it);
100         if (IsArgNumber(rArg) && ExtractNumber(rArg))
101         {
102             m_bFound = true;
103
104             if (vwArgContext.RemoveArg(rArg))
105             {
106                 m_bValid = true;
107                 m_argValue = GetNumber();
108                 return MIstatus::success;
109             }
110             else
111                 return MIstatus::failure;
112         }
113
114         // Next
115         ++it;
116     }
117
118     return MIstatus::failure;
119 }
120
121 //++ ------------------------------------------------------------------------------------
122 // Details: Examine the string and determine if it is a valid string type argument.
123 // Type:    Method.
124 // Args:    vrTxt   - (R) Some text.
125 // Return:  bool    - True = yes valid arg, false = no.
126 // Throws:  None.
127 //--
128 bool
129 CMICmdArgValNumber::IsArgNumber(const CMIUtilString &vrTxt) const
130 {
131     // Look for --someLongOption
132     if (std::string::npos != vrTxt.find("--"))
133         return false;
134
135     return vrTxt.IsNumber();
136 }
137
138 //++ ------------------------------------------------------------------------------------
139 // Details: Extract the thread group number from the thread group argument.
140 // Type:    Method.
141 // Args:    vrTxt   - (R) Some text.
142 // Return:  MIstatus::success - Functional succeeded.
143 //          MIstatus::failure - Functional failed.
144 // Throws:  None.
145 //--
146 bool
147 CMICmdArgValNumber::ExtractNumber(const CMIUtilString &vrTxt)
148 {
149     MIint64 nNumber = 0;
150     bool bOk = vrTxt.ExtractNumber(nNumber);
151     if (bOk)
152     {
153         m_nNumber = static_cast<MIint>(nNumber);
154     }
155
156     return bOk;
157 }
158
159 //++ ------------------------------------------------------------------------------------
160 // Details: Retrieve the thread group ID found in the argument.
161 // Type:    Method.
162 // Args:    None.
163 // Return:  MIuint - Thread group ID.
164 // Throws:  None.
165 //--
166 MIint64
167 CMICmdArgValNumber::GetNumber(void) const
168 {
169     return m_nNumber;
170 }