]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tools/lldb-mi/MICmnMIResultRecord.cpp
Vendor import of lldb trunk r290819:
[FreeBSD/FreeBSD.git] / tools / lldb-mi / MICmnMIResultRecord.cpp
1 //===-- MICmnMIResultRecord.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 // Third Party Headers:
11 #include <assert.h>
12
13 // In-house headers:
14 #include "MICmnMIResultRecord.h"
15 #include "MICmnResources.h"
16
17 //++
18 //------------------------------------------------------------------------------------
19 // Details: Map a result class to the corresponding string.
20 // Args:    veType      - (R) A MI result class enumeration.
21 // Return:  const char* - The string corresponding to the result class.
22 // Throws:  None.
23 //--
24 static const char *
25 MapResultClassToResultClassText(CMICmnMIResultRecord::ResultClass_e veType) {
26   switch (veType) {
27   case CMICmnMIResultRecord::eResultClass_Done:
28     return "done";
29   case CMICmnMIResultRecord::eResultClass_Running:
30     return "running";
31   case CMICmnMIResultRecord::eResultClass_Connected:
32     return "connected";
33   case CMICmnMIResultRecord::eResultClass_Error:
34     return "error";
35   case CMICmnMIResultRecord::eResultClass_Exit:
36     return "exit";
37   }
38   assert(false && "unknown CMICmnMIResultRecord::ResultClass_e");
39   return NULL;
40 }
41
42 //++
43 //------------------------------------------------------------------------------------
44 // Details: Build the result record's mandatory data part. The part up to the
45 // first
46 //          (additional) result i.e. result-record ==>  [ token ] "^"
47 //          result-class.
48 // Args:    vrToken     - (R) The command's transaction ID or token.
49 //          veType      - (R) A MI result class enumeration.
50 // Return:  CMIUtilString & - MI result record mandatory data
51 // Throws:  None.
52 //--
53 static const CMIUtilString
54 BuildResultRecord(const CMIUtilString &vrToken,
55                   CMICmnMIResultRecord::ResultClass_e veType) {
56   const char *pStrResultRecord = MapResultClassToResultClassText(veType);
57   return CMIUtilString::Format("%s^%s", vrToken.c_str(), pStrResultRecord);
58 }
59
60 //++
61 //------------------------------------------------------------------------------------
62 // Details: CMICmnMIResultRecord constructor.
63 // Type:    Method.
64 // Args:    None.
65 // Return:  None.
66 // Throws:  None.
67 //--
68 CMICmnMIResultRecord::CMICmnMIResultRecord()
69     : m_strResultRecord(MIRSRC(IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION)) {}
70
71 //++
72 //------------------------------------------------------------------------------------
73 // Details: CMICmnMIResultRecord constructor.
74 // Type:    Method.
75 // Args:    vrToken - (R) The command's transaction ID or token.
76 //          veType  - (R) A MI result class enumeration.
77 // Return:  None.
78 // Throws:  None.
79 //--
80 CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken,
81                                            ResultClass_e veType)
82     : m_strResultRecord(BuildResultRecord(vrToken, veType)) {}
83
84 //++
85 //------------------------------------------------------------------------------------
86 // Details: CMICmnMIResultRecord constructor.
87 // Type:    Method.
88 // Args:    vrToken     - (R) The command's transaction ID or token.
89 //          veType      - (R) A MI result class enumeration.
90 //          vMIResult   - (R) A MI result object.
91 // Return:  None.
92 // Throws:  None.
93 //--
94 CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken,
95                                            ResultClass_e veType,
96                                            const CMICmnMIValueResult &vValue)
97     : m_strResultRecord(BuildResultRecord(vrToken, veType)) {
98   Add(vValue);
99 }
100
101 //++
102 //------------------------------------------------------------------------------------
103 // Details: CMICmnMIResultRecord destructor.
104 // Type:    Overrideable.
105 // Args:    None.
106 // Return:  None.
107 // Throws:  None.
108 //--
109 CMICmnMIResultRecord::~CMICmnMIResultRecord() {}
110
111 //++
112 //------------------------------------------------------------------------------------
113 // Details: Return the MI result record as a string. The string is a direct
114 // result of
115 //          work done on *this result record so if not enough data is added then
116 //          it is
117 //          possible to return a malformed result record. If nothing has been
118 //          set or
119 //          added to *this MI result record object then text "<Invalid>" will be
120 //          returned.
121 // Type:    Method.
122 // Args:    None.
123 // Return:  CMIUtilString & - MI output text.
124 // Throws:  None.
125 //--
126 const CMIUtilString &CMICmnMIResultRecord::GetString() const {
127   return m_strResultRecord;
128 }
129
130 //++
131 //------------------------------------------------------------------------------------
132 // Details: Add to *this result record additional information.
133 // Type:    Method.
134 // Args:    vMIValue    - (R) A MI value derived object.
135 // Return:  None.
136 // Throws:  None.
137 //--
138 void CMICmnMIResultRecord::Add(const CMICmnMIValue &vMIValue) {
139   m_strResultRecord += ",";
140   m_strResultRecord += vMIValue.GetString();
141 }