]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/tools/lldb-mi/MICmdArgValNumber.cpp
Merge ^/head r274961 through r276342.
[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 CMICmdArgValNumber::Validate( CMICmdArgContext & vwArgContext )
74 {
75         if( vwArgContext.IsEmpty() )
76                 return MIstatus::success;
77
78         if( vwArgContext.GetNumberArgsPresent() == 1 )
79         {
80                 const CMIUtilString & rArg( vwArgContext.GetArgsLeftToParse() ); 
81                 if( IsArgNumber( rArg ) && ExtractNumber( rArg ) )
82                 {
83                         m_bFound = true;
84                         m_bValid = true;
85                         m_argValue = GetNumber();
86                         vwArgContext.RemoveArg( rArg );
87                         return MIstatus::success;
88                 }
89                 else
90                         return MIstatus::failure;
91         }
92         
93         // More than one option...
94         const CMIUtilString::VecString_t vecOptions( vwArgContext.GetArgs() );
95         CMIUtilString::VecString_t::const_iterator it = vecOptions.begin();
96         while( it != vecOptions.end() )
97         {
98                 const CMIUtilString & rArg( *it ); 
99                 if( IsArgNumber( rArg ) && ExtractNumber( rArg ) )
100                 {
101                         m_bFound = true;
102                                 
103                         if( vwArgContext.RemoveArg( rArg ) )
104                         {
105                                 m_bValid = true;
106                                 m_argValue = GetNumber();
107                                 return MIstatus::success;
108                         }
109                         else
110                                 return MIstatus::failure;
111                 }
112                 
113                 // Next
114                 ++it;
115         }
116
117         return MIstatus::failure;
118 }
119
120 //++ ------------------------------------------------------------------------------------
121 // Details:     Examine the string and determine if it is a valid string type argument.
122 // Type:        Method.
123 // Args:        vrTxt   - (R) Some text.
124 // Return:      bool -  True = yes valid arg, false = no.
125 // Throws:      None.
126 //--
127 bool CMICmdArgValNumber::IsArgNumber( const CMIUtilString & vrTxt ) const
128 {
129         // Look for --someLongOption
130         if( std::string::npos != vrTxt.find( "--" ) )
131                 return false;
132         
133         return vrTxt.IsNumber();
134 }
135
136 //++ ------------------------------------------------------------------------------------
137 // Details:     Extract the thread group number from the thread group argument.
138 // Type:        Method.
139 // Args:        vrTxt   - (R) Some text.
140 // Return:      MIstatus::success - Functional succeeded.
141 //                      MIstatus::failure - Functional failed.
142 // Throws:      None.
143 //--
144 bool CMICmdArgValNumber::ExtractNumber( const CMIUtilString & vrTxt ) 
145 {
146         MIint64 nNumber = 0;
147         bool bOk = vrTxt.ExtractNumber( nNumber );
148         if( bOk )
149         {
150                 m_nNumber = static_cast< MIint >( nNumber );
151         }
152         
153         return bOk;
154 }
155
156 //++ ------------------------------------------------------------------------------------
157 // Details:     Retrieve the thread group ID found in the argument.
158 // Type:        Method.
159 // Args:        None.
160 // Return:      MIuint - Thread group ID.
161 // Throws:      None.
162 //--
163 MIint64 CMICmdArgValNumber::GetNumber( void ) const
164 {
165         return m_nNumber;
166 }
167