#ifndef liblldb_OptionValue_h_
#define liblldb_OptionValue_h_
#include "lldb/lldb-defines.h"
#include "lldb/Core/ConstString.h"
#include "lldb/Core/Error.h"
namespace lldb_private {
class OptionValue
{
public:
typedef enum {
eTypeInvalid = 0,
eTypeArch,
eTypeArgs,
eTypeArray,
eTypeBoolean,
eTypeDictionary,
eTypeEnum,
eTypeFileSpec,
eTypeFileSpecList,
eTypeFormat,
eTypePathMap,
eTypeProperties,
eTypeRegex,
eTypeSInt64,
eTypeString,
eTypeUInt64,
eTypeUUID
} Type;
enum {
eDumpOptionName = (1u << 0),
eDumpOptionType = (1u << 1),
eDumpOptionValue = (1u << 2),
eDumpOptionDescription = (1u << 3),
eDumpOptionRaw = (1u << 4),
eDumpGroupValue = (eDumpOptionName | eDumpOptionType | eDumpOptionValue),
eDumpGroupHelp = (eDumpOptionName | eDumpOptionType | eDumpOptionDescription)
};
OptionValue () :
m_value_was_set (false)
{
}
OptionValue (const OptionValue &rhs) :
m_value_was_set (rhs.m_value_was_set)
{
}
virtual ~OptionValue ()
{
}
virtual Type
GetType () const = 0;
virtual bool
ValueIsTransparent () const
{
return GetType() == eTypeProperties;
}
virtual const char *
GetTypeAsCString () const
{
return GetBuiltinTypeAsCString(GetType());
}
static const char *
GetBuiltinTypeAsCString (Type t);
virtual void
DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask) = 0;
virtual Error
SetValueFromCString (const char *value, VarSetOperationType op = eVarSetOperationAssign);
virtual bool
Clear () = 0;
virtual lldb::OptionValueSP
DeepCopy () const = 0;
virtual size_t
AutoComplete (CommandInterpreter &interpreter,
const char *s,
int match_start_point,
int max_return_elements,
bool &word_complete,
StringList &matches);
virtual lldb::OptionValueSP
GetSubValue (const ExecutionContext *exe_ctx,
const char *name,
bool will_modify,
Error &error) const
{
error.SetErrorStringWithFormat("'%s' is not a value subvalue", name);
return lldb::OptionValueSP();
}
virtual Error
SetSubValue (const ExecutionContext *exe_ctx,
VarSetOperationType op,
const char *name,
const char *value);
virtual bool
IsAggregateValue () const
{
return false;
}
virtual ConstString
GetName() const
{
return ConstString();
}
virtual bool
DumpQualifiedName (Stream &strm) const;
uint32_t
GetTypeAsMask ()
{
return 1u << GetType();
}
static uint32_t
ConvertTypeToMask (OptionValue::Type type)
{
return 1u << type;
}
static OptionValue::Type
ConvertTypeMaskToType (uint32_t type_mask)
{
switch (type_mask)
{
case 1u << eTypeArch: return eTypeArch;
case 1u << eTypeArgs: return eTypeArgs;
case 1u << eTypeArray: return eTypeArray;
case 1u << eTypeBoolean: return eTypeBoolean;
case 1u << eTypeDictionary: return eTypeDictionary;
case 1u << eTypeEnum: return eTypeEnum;
case 1u << eTypeFileSpec: return eTypeFileSpec;
case 1u << eTypeFileSpecList: return eTypeFileSpecList;
case 1u << eTypeFormat: return eTypeFormat;
case 1u << eTypePathMap: return eTypePathMap;
case 1u << eTypeProperties: return eTypeProperties;
case 1u << eTypeRegex: return eTypeRegex;
case 1u << eTypeSInt64: return eTypeSInt64;
case 1u << eTypeString: return eTypeString;
case 1u << eTypeUInt64: return eTypeUInt64;
case 1u << eTypeUUID: return eTypeUUID;
}
return eTypeInvalid;
}
static lldb::OptionValueSP
CreateValueFromCStringForTypeMask (const char *value_cstr,
uint32_t type_mask,
Error &error);
uint64_t
GetUInt64Value (uint64_t fail_value, bool *success_ptr);
OptionValueArch *
GetAsArch ();
const OptionValueArch *
GetAsArch () const;
OptionValueArray *
GetAsArray ();
const OptionValueArray *
GetAsArray () const;
OptionValueArgs *
GetAsArgs ();
const OptionValueArgs *
GetAsArgs () const;
OptionValueBoolean *
GetAsBoolean ();
const OptionValueBoolean *
GetAsBoolean () const;
OptionValueDictionary *
GetAsDictionary ();
const OptionValueDictionary *
GetAsDictionary () const;
OptionValueEnumeration *
GetAsEnumeration ();
const OptionValueEnumeration *
GetAsEnumeration () const;
OptionValueFileSpec *
GetAsFileSpec ();
const OptionValueFileSpec *
GetAsFileSpec () const;
OptionValueFileSpecList *
GetAsFileSpecList ();
const OptionValueFileSpecList *
GetAsFileSpecList () const;
OptionValueFormat *
GetAsFormat ();
const OptionValueFormat *
GetAsFormat () const;
OptionValuePathMappings *
GetAsPathMappings ();
const OptionValuePathMappings *
GetAsPathMappings () const;
OptionValueProperties *
GetAsProperties ();
const OptionValueProperties *
GetAsProperties () const;
OptionValueRegex *
GetAsRegex ();
const OptionValueRegex *
GetAsRegex () const;
OptionValueSInt64 *
GetAsSInt64 ();
const OptionValueSInt64 *
GetAsSInt64 () const;
OptionValueString *
GetAsString ();
const OptionValueString *
GetAsString () const;
OptionValueUInt64 *
GetAsUInt64 ();
const OptionValueUInt64 *
GetAsUInt64 () const;
OptionValueUUID *
GetAsUUID ();
const OptionValueUUID *
GetAsUUID () const;
bool
GetBooleanValue (bool fail_value = false) const;
bool
SetBooleanValue (bool new_value);
int64_t
GetEnumerationValue (int64_t fail_value = -1) const;
bool
SetEnumerationValue (int64_t value);
FileSpec
GetFileSpecValue () const;
bool
SetFileSpecValue (const FileSpec &file_spec);
FileSpecList
GetFileSpecListValue () const;
lldb::Format
GetFormatValue (lldb::Format fail_value = lldb::eFormatDefault) const;
bool
SetFormatValue (lldb::Format new_value);
const RegularExpression *
GetRegexValue () const;
int64_t
GetSInt64Value (int64_t fail_value = 0) const;
bool
SetSInt64Value (int64_t new_value);
const char *
GetStringValue (const char *fail_value = NULL) const;
bool
SetStringValue (const char *new_value);
uint64_t
GetUInt64Value (uint64_t fail_value = 0) const;
bool
SetUInt64Value (uint64_t new_value);
UUID
GetUUIDValue () const;
bool
SetUUIDValue (const UUID &uuid);
bool
OptionWasSet () const
{
return m_value_was_set;
}
void
SetOptionWasSet ()
{
m_value_was_set = true;
}
void
SetParent (const lldb::OptionValueSP &parent_sp)
{
m_parent_wp = parent_sp;
}
protected:
lldb::OptionValueWP m_parent_wp;
bool m_value_was_set;
};
}
#endif // liblldb_OptionValue_h_