#pragma once
#include "lldb/API/SBValue.h"
#include <map>
#include "MIUtilString.h"
class CMICmnLLDBDebugSessionInfoVarObj {
public:
enum varFormat_e {
eVarFormat_Invalid = 0,
eVarFormat_Binary,
eVarFormat_Octal,
eVarFormat_Decimal,
eVarFormat_Hex,
eVarFormat_Natural,
eVarFormat_count
};
enum varType_e {
eVarType_InValid = 0,
eVarType_Composite,
eVarType_Internal,
eVarType_count
};
enum class valObjKind_ec {
eValObjKind_Other = 0,
eValObjKind_ConstResult
};
public:
static varFormat_e GetVarFormatForString(const CMIUtilString &vrStrFormat);
static varFormat_e GetVarFormatForChar(char vcFormat);
static CMIUtilString GetValueStringFormatted(const lldb::SBValue &vrValue,
const varFormat_e veVarFormat);
static void VarObjAdd(const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj);
static void VarObjDelete(const CMIUtilString &vrVarName);
static bool VarObjGet(const CMIUtilString &vrVarName,
CMICmnLLDBDebugSessionInfoVarObj &vrwVarObj);
static void VarObjUpdate(const CMICmnLLDBDebugSessionInfoVarObj &vrVarObj);
static void VarObjIdInc();
static MIuint VarObjIdGet();
static void VarObjIdResetToZero();
static void VarObjClear();
static void VarObjSetFormat(varFormat_e eDefaultFormat);
public:
CMICmnLLDBDebugSessionInfoVarObj();
CMICmnLLDBDebugSessionInfoVarObj(
const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
const lldb::SBValue &vrValue, const valObjKind_ec eValObjKind);
CMICmnLLDBDebugSessionInfoVarObj(
const CMIUtilString &vrStrNameReal, const CMIUtilString &vrStrName,
const lldb::SBValue &vrValue, const CMIUtilString &vrStrVarObjParentName,
const valObjKind_ec eValObjKind);
CMICmnLLDBDebugSessionInfoVarObj(
const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
CMICmnLLDBDebugSessionInfoVarObj(
CMICmnLLDBDebugSessionInfoVarObj &&vrOther);
CMICmnLLDBDebugSessionInfoVarObj &
operator=(const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
CMICmnLLDBDebugSessionInfoVarObj &
operator=(CMICmnLLDBDebugSessionInfoVarObj &&vrwOther);
const CMIUtilString &GetName() const;
const CMIUtilString &GetNameReal() const;
const CMIUtilString &GetValueFormatted() const;
lldb::SBValue &GetValue();
const lldb::SBValue &GetValue() const;
varType_e GetType() const;
bool SetVarFormat(const varFormat_e veVarFormat);
const CMIUtilString &GetVarParentName() const;
valObjKind_ec GetValObjKind() const;
void UpdateValue();
public:
virtual ~CMICmnLLDBDebugSessionInfoVarObj();
private:
typedef std::map<CMIUtilString, CMICmnLLDBDebugSessionInfoVarObj>
MapKeyToVarObj_t;
typedef std::pair<CMIUtilString, CMICmnLLDBDebugSessionInfoVarObj>
MapPairKeyToVarObj_t;
private:
static CMIUtilString
GetStringFormatted(const MIuint64 vnValue,
const CMIUtilString &vrStrValueNatural,
varFormat_e veVarFormat);
private:
void CopyOther(const CMICmnLLDBDebugSessionInfoVarObj &vrOther);
void MoveOther(CMICmnLLDBDebugSessionInfoVarObj &&vrwOther);
private:
static const char *ms_aVarFormatStrings[];
static const char *ms_aVarFormatChars[];
static MapKeyToVarObj_t ms_mapVarIdToVarObj;
static MIuint ms_nVarUniqueId;
static varFormat_e ms_eDefaultFormat;
varFormat_e m_eVarFormat;
varType_e m_eVarType;
valObjKind_ec m_eValObjKind;
CMIUtilString m_strName;
lldb::SBValue m_SBValue;
CMIUtilString m_strNameReal;
CMIUtilString m_strFormattedValue;
CMIUtilString m_strVarObjParentName;
};
using ValObjKind_ec = CMICmnLLDBDebugSessionInfoVarObj::valObjKind_ec;