blob: fc33c9f3babec81de3fb937166a03c429736e9cb [file] [log] [blame]
//===-- MICmnLLDBDebugSessionInfoVarObj.h -----------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//++
// File: MICmnLLDBDebugSessionInfoVarObj.h
//
// Overview: CMICmnLLDBDebugSessionInfoVarObj interface.
//
// Environment: Compilers: Visual C++ 12.
// gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
// Libraries: See MIReadmetxt.
//
// Copyright: None.
//--
#pragma once
// Third Party Headers:
#include <map>
#include <lldb/API/SBValue.h>
// In-house headers:
#include "MIUtilString.h"
//++ ============================================================================
// Details: MI debug session variable object. The static functionality in *this
// class manages a map container of *these variable objects.
// Gotchas: None.
// Authors: Illya Rudkin 24/03/2014.
// Changes: None.
//--
class CMICmnLLDBDebugSessionInfoVarObj
{
// Enums:
public:
//++ ----------------------------------------------------------------------
// Details: Enumeration of a variable type that is not a composite type
//--
enum varFormat_e
{
// CODETAG_SESSIONINFO_VARFORMAT_ENUM
// *** Order is import here ***
eVarFormat_Invalid = 0,
eVarFormat_Binary,
eVarFormat_Octal,
eVarFormat_Decimal,
eVarFormat_Hex,
eVarFormat_Natural,
eVarFormat_count // Always last one
};
//++ ----------------------------------------------------------------------
// Details: Enumeration of a variable type by composite or internal type
//--
enum varType_e
{
eVarType_InValid = 0,
eVarType_Composite, // i.e. struct
eVarType_Internal, // i.e. int
eVarType_count // Always last one
};
// Statics:
public:
static varFormat_e GetVarFormatForString( const CMIUtilString & vrStrFormat );
static varFormat_e GetVarFormatForChar( const MIchar & vrcFormat );
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( void );
static MIuint VarObjIdGet( void );
static void VarObjIdResetToZero( void );
static void VarObjClear( void );
// Methods:
public:
/* ctor */ CMICmnLLDBDebugSessionInfoVarObj( void );
/* ctor */ CMICmnLLDBDebugSessionInfoVarObj( const CMIUtilString & vrStrNameReal, const CMIUtilString & vrStrName, const lldb::SBValue & vrValue );
/* ctor */ CMICmnLLDBDebugSessionInfoVarObj( const CMIUtilString & vrStrNameReal, const CMIUtilString & vrStrName, const lldb::SBValue & vrValue, const CMIUtilString & vrStrVarObjParentName );
/* ctor */ CMICmnLLDBDebugSessionInfoVarObj( const CMICmnLLDBDebugSessionInfoVarObj & vrOther );
/* ctor */ CMICmnLLDBDebugSessionInfoVarObj( CMICmnLLDBDebugSessionInfoVarObj & vrOther );
//
CMICmnLLDBDebugSessionInfoVarObj & operator= ( const CMICmnLLDBDebugSessionInfoVarObj & vrOther );
//
const CMIUtilString & GetName( void ) const;
const CMIUtilString & GetNameReal( void ) const;
const CMIUtilString & GetValueFormatted( void ) const;
const lldb::SBValue & GetValue( void ) const;
varType_e GetType( void ) const;
bool SetVarFormat( const varFormat_e veVarFormat );
const CMIUtilString & GetVarParentName( void ) const;
void UpdateValue( void );
// Overridden:
public:
// From CMICmnBase
/* dtor */ virtual ~CMICmnLLDBDebugSessionInfoVarObj( void );
// Typedefs:
private:
typedef std::map< CMIUtilString, CMICmnLLDBDebugSessionInfoVarObj > MapKeyToVarObj_t;
typedef std::pair< CMIUtilString, CMICmnLLDBDebugSessionInfoVarObj > MapPairKeyToVarObj_t;
// Statics:
private:
static CMIUtilString GetStringFormatted( const MIuint64 vnValue, const MIchar * vpStrValueNatural, varFormat_e veVarFormat );
// Methods:
private:
bool CopyOther( const CMICmnLLDBDebugSessionInfoVarObj & vrOther );
// Attributes:
private:
static const MIchar * ms_aVarFormatStrings[];
static const MIchar * ms_aVarFormatChars[];
static MapKeyToVarObj_t ms_mapVarIdToVarObj;
static MIuint ms_nVarUniqueId;
//
// *** Upate the copy constructors and assignment operator ***
varFormat_e m_eVarFormat;
varType_e m_eVarType;
CMIUtilString m_strName;
lldb::SBValue m_SBValue;
CMIUtilString m_strNameReal;
CMIUtilString m_strFormattedValue;
CMIUtilString m_strVarObjParentName;
// *** Upate the copy constructors and assignment operator ***
};