forked from OSchip/llvm-project
209 lines
7.3 KiB
C++
209 lines
7.3 KiB
C++
//===-- MICmnMIOutOfBandRecord.cpp ------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// Third Party Headers:
|
|
#include <assert.h>
|
|
|
|
// In-house headers:
|
|
#include "MICmnMIOutOfBandRecord.h"
|
|
#include "MICmnResources.h"
|
|
|
|
// Instantiations:
|
|
static const char *
|
|
MapOutOfBandToText(CMICmnMIOutOfBandRecord::OutOfBand_e veType) {
|
|
switch (veType) {
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_Running:
|
|
return "running";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_Stopped:
|
|
return "stopped";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated:
|
|
return "breakpoint-created";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified:
|
|
return "breakpoint-modified";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_Thread:
|
|
return ""; // "" Meant to be empty
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupAdded:
|
|
return "thread-group-added";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited:
|
|
return "thread-group-exited";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupRemoved:
|
|
return "thread-group-removed";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted:
|
|
return "thread-group-started";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated:
|
|
return "thread-created";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited:
|
|
return "thread-exited";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected:
|
|
return "thread-selected";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded:
|
|
return "library-loaded";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded:
|
|
return "library-unloaded";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput:
|
|
return "";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ConsoleStreamOutput:
|
|
return "";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_LogStreamOutput:
|
|
return "";
|
|
}
|
|
assert(false && "unknown CMICmnMIOutofBandRecord::OutOfBand_e");
|
|
return NULL;
|
|
}
|
|
|
|
static const char *
|
|
MapOutOfBandToToken(CMICmnMIOutOfBandRecord::OutOfBand_e veType) {
|
|
switch (veType) {
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_Running:
|
|
return "*";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_Stopped:
|
|
return "*";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointCreated:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_BreakPointModified:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_Thread:
|
|
return "@";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupAdded:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupExited:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupRemoved:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadGroupStarted:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadCreated:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadExited:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ThreadSelected:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleLoaded:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_TargetModuleUnloaded:
|
|
return "=";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_TargetStreamOutput:
|
|
return "@";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_ConsoleStreamOutput:
|
|
return "~";
|
|
case CMICmnMIOutOfBandRecord::eOutOfBand_LogStreamOutput:
|
|
return "&";
|
|
}
|
|
assert(false && "unknown CMICmnMIOutofBandRecord::OutOfBand_e");
|
|
return NULL;
|
|
}
|
|
|
|
//++
|
|
//------------------------------------------------------------------------------------
|
|
// Details: Build the Out-of-band record's mandatory data part. The part up to
|
|
// the first
|
|
// (additional) result i.e. async-record ==> "*" type.
|
|
// Args: veType - (R) A MI Out-of-Band enumeration.
|
|
// Return: CMIUtilString - The async record text.
|
|
// Throws: None.
|
|
//--
|
|
static CMIUtilString
|
|
BuildAsyncRecord(CMICmnMIOutOfBandRecord::OutOfBand_e veType) {
|
|
return CMIUtilString::Format("%s%s", MapOutOfBandToToken(veType),
|
|
MapOutOfBandToText(veType));
|
|
}
|
|
|
|
//++
|
|
//------------------------------------------------------------------------------------
|
|
// Details: CMICmnMIOutOfBandRecord constructor.
|
|
// Type: Method.
|
|
// Args: None.
|
|
// Return: None.
|
|
// Throws: None.
|
|
//--
|
|
CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord()
|
|
: m_strAsyncRecord(MIRSRC(IDS_CMD_ERR_EVENT_HANDLED_BUT_NO_ACTION)) {}
|
|
|
|
//++
|
|
//------------------------------------------------------------------------------------
|
|
// Details: CMICmnMIOutOfBandRecord constructor.
|
|
// Type: Method.
|
|
// Args: veType - (R) A MI Out-of-Bound enumeration.
|
|
// Return: None.
|
|
// Throws: None.
|
|
//--
|
|
CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(OutOfBand_e veType)
|
|
: m_strAsyncRecord(BuildAsyncRecord(veType)) {}
|
|
|
|
//++
|
|
//------------------------------------------------------------------------------------
|
|
// Details: CMICmnMIOutOfBandRecord constructor.
|
|
// Type: Method.
|
|
// Args: veType - (R) A MI Out-of-Bound enumeration.
|
|
// vConst - (R) A MI const object.
|
|
// Return: None.
|
|
// Throws: None.
|
|
//--
|
|
CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(
|
|
OutOfBand_e veType, const CMICmnMIValueConst &vConst)
|
|
: m_strAsyncRecord(BuildAsyncRecord(veType)) {
|
|
m_strAsyncRecord += vConst.GetString();
|
|
}
|
|
|
|
//++
|
|
//------------------------------------------------------------------------------------
|
|
// Details: CMICmnMIOutOfBandRecord constructor.
|
|
// Type: Method.
|
|
// Args: veType - (R) A MI Out-of-Bound enumeration.
|
|
// vResult - (R) A MI result object.
|
|
// Return: None.
|
|
// Throws: None.
|
|
//--
|
|
CMICmnMIOutOfBandRecord::CMICmnMIOutOfBandRecord(
|
|
OutOfBand_e veType, const CMICmnMIValueResult &vResult)
|
|
: m_strAsyncRecord(BuildAsyncRecord(veType)) {
|
|
Add(vResult);
|
|
}
|
|
|
|
//++
|
|
//------------------------------------------------------------------------------------
|
|
// Details: CMICmnMIOutOfBandRecord destructor.
|
|
// Type: Overrideable.
|
|
// Args: None.
|
|
// Return: None.
|
|
// Throws: None.
|
|
//--
|
|
CMICmnMIOutOfBandRecord::~CMICmnMIOutOfBandRecord() {}
|
|
|
|
//++
|
|
//------------------------------------------------------------------------------------
|
|
// Details: Return the MI Out-of-band record as a string. The string is a direct
|
|
// result of
|
|
// work done on *this Out-of-band record so if not enough data is added
|
|
// then it is
|
|
// possible to return a malformed Out-of-band record. If nothing has
|
|
// been set or
|
|
// added to *this MI Out-of-band record object then text "<Invalid>"
|
|
// will be returned.
|
|
// Type: Method.
|
|
// Args: None.
|
|
// Return: CMIUtilString & - MI output text.
|
|
// Throws: None.
|
|
//--
|
|
const CMIUtilString &CMICmnMIOutOfBandRecord::GetString() const {
|
|
return m_strAsyncRecord;
|
|
}
|
|
|
|
//++
|
|
//------------------------------------------------------------------------------------
|
|
// Details: Add to *this Out-of-band record additional information.
|
|
// Type: Method.
|
|
// Args: vResult - (R) A MI result object.
|
|
// Return: None.
|
|
// Throws: None.
|
|
//--
|
|
void CMICmnMIOutOfBandRecord::Add(const CMICmnMIValueResult &vResult) {
|
|
m_strAsyncRecord += ",";
|
|
m_strAsyncRecord += vResult.GetString();
|
|
}
|