aboutsummaryrefslogtreecommitdiff
path: root/tools/lldb-mi/MICmnMIResultRecord.cpp
blob: 0348f8941316243a73233eb2bc84d9a4b4cb6503 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//===-- MICmnMIResultRecord.cpp ---------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

// Third Party Headers:
#include <assert.h>

// In-house headers:
#include "MICmnMIResultRecord.h"
#include "MICmnResources.h"

//++ ------------------------------------------------------------------------------------
// Details: Map a result class to the corresponding string.
// Args:    veType      - (R) A MI result class enumeration.
// Return:  const char* - The string corresponding to the result class.
// Throws:  None.
//--
static const char*
MapResultClassToResultClassText(CMICmnMIResultRecord::ResultClass_e veType)
{
    switch (veType)
    {
      case CMICmnMIResultRecord::eResultClass_Done:
        return "done";
      case CMICmnMIResultRecord::eResultClass_Running:
        return "running";
      case CMICmnMIResultRecord::eResultClass_Connected:
        return "connected";
      case CMICmnMIResultRecord::eResultClass_Error:
        return "error";
      case CMICmnMIResultRecord::eResultClass_Exit:
        return "exit";
    }
    assert(false && "unknown CMICmnMIResultRecord::ResultClass_e");
    return NULL;
}

//++ ------------------------------------------------------------------------------------
// Details: Build the result record's mandatory data part. The part up to the first
//          (additional) result i.e. result-record ==>  [ token ] "^" result-class.
// Args:    vrToken     - (R) The command's transaction ID or token.
//          veType      - (R) A MI result class enumeration.
// Return:  CMIUtilString & - MI result record mandatory data
// Throws:  None.
//--
static const CMIUtilString
BuildResultRecord(const CMIUtilString &vrToken, CMICmnMIResultRecord::ResultClass_e veType)
{
    const char *pStrResultRecord = MapResultClassToResultClassText(veType);
    return CMIUtilString::Format("%s^%s", vrToken.c_str(), pStrResultRecord);
}

//++ ------------------------------------------------------------------------------------
// Details: CMICmnMIResultRecord constructor.
// Type:    Method.
// Args:    None.
// Return:  None.
// Throws:  None.
//--
CMICmnMIResultRecord::CMICmnMIResultRecord()
    : m_strResultRecord(MIRSRC(IDS_CMD_ERR_CMD_RUN_BUT_NO_ACTION))
{
}

//++ ------------------------------------------------------------------------------------
// Details: CMICmnMIResultRecord constructor.
// Type:    Method.
// Args:    vrToken - (R) The command's transaction ID or token.
//          veType  - (R) A MI result class enumeration.
// Return:  None.
// Throws:  None.
//--
CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken, ResultClass_e veType)
    : m_strResultRecord(BuildResultRecord(vrToken, veType))
{
}

//++ ------------------------------------------------------------------------------------
// Details: CMICmnMIResultRecord constructor.
// Type:    Method.
// Args:    vrToken     - (R) The command's transaction ID or token.
//          veType      - (R) A MI result class enumeration.
//          vMIResult   - (R) A MI result object.
// Return:  None.
// Throws:  None.
//--
CMICmnMIResultRecord::CMICmnMIResultRecord(const CMIUtilString &vrToken, ResultClass_e veType, const CMICmnMIValueResult &vValue)
    : m_strResultRecord(BuildResultRecord(vrToken, veType))
{
    Add(vValue);
}

//++ ------------------------------------------------------------------------------------
// Details: CMICmnMIResultRecord destructor.
// Type:    Overrideable.
// Args:    None.
// Return:  None.
// Throws:  None.
//--
CMICmnMIResultRecord::~CMICmnMIResultRecord()
{
}

//++ ------------------------------------------------------------------------------------
// Details: Return the MI result record as a string. The string is a direct result of
//          work done on *this result record so if not enough data is added then it is
//          possible to return a malformed result record. If nothing has been set or
//          added to *this MI result record object then text "<Invalid>" will be returned.
// Type:    Method.
// Args:    None.
// Return:  CMIUtilString & - MI output text.
// Throws:  None.
//--
const CMIUtilString &
CMICmnMIResultRecord::GetString() const
{
    return m_strResultRecord;
}

//++ ------------------------------------------------------------------------------------
// Details: Add to *this result record additional information.
// Type:    Method.
// Args:    vMIValue    - (R) A MI value derived object.
// Return:  None.
// Throws:  None.
//--
void
CMICmnMIResultRecord::Add(const CMICmnMIValue &vMIValue)
{
    m_strResultRecord += ",";
    m_strResultRecord += vMIValue.GetString();
}