OptionValueEnumeration.h revision 360784
1221345Sdim//===-- OptionValueEnumeration.h --------------------------------*- C++ -*-===// 2218885Sdim// 3218885Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4218885Sdim// See https://llvm.org/LICENSE.txt for license information. 5218885Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6218885Sdim// 7218885Sdim//===----------------------------------------------------------------------===// 8218885Sdim 9218885Sdim#ifndef liblldb_OptionValueEnumeration_h_ 10218885Sdim#define liblldb_OptionValueEnumeration_h_ 11218885Sdim 12218885Sdim#include "lldb/Core/UniqueCStringMap.h" 13218885Sdim#include "lldb/Interpreter/OptionValue.h" 14218885Sdim#include "lldb/Utility/ConstString.h" 15218885Sdim#include "lldb/Utility/Status.h" 16218885Sdim#include "lldb/Utility/Stream.h" 17252723Sdim#include "lldb/Utility/StreamString.h" 18252723Sdim#include "lldb/lldb-private-types.h" 19218885Sdim 20245431Sdimnamespace lldb_private { 21245431Sdim 22218885Sdimclass OptionValueEnumeration : public OptionValue { 23218885Sdimpublic: 24218885Sdim typedef int64_t enum_type; 25218885Sdim struct EnumeratorInfo { 26218885Sdim enum_type value; 27218885Sdim const char *description; 28218885Sdim }; 29218885Sdim typedef UniqueCStringMap<EnumeratorInfo> EnumerationMap; 30218885Sdim typedef EnumerationMap::Entry EnumerationMapEntry; 31218885Sdim 32218885Sdim OptionValueEnumeration(const OptionEnumValues &enumerators, enum_type value); 33218885Sdim 34218885Sdim ~OptionValueEnumeration() override; 35218885Sdim 36218885Sdim // Virtual subclass pure virtual overrides 37218885Sdim 38218885Sdim OptionValue::Type GetType() const override { return eTypeEnum; } 39218885Sdim 40218885Sdim void DumpValue(const ExecutionContext *exe_ctx, Stream &strm, 41218885Sdim uint32_t dump_mask) override; 42218885Sdim 43218885Sdim Status 44218885Sdim SetValueFromString(llvm::StringRef value, 45218885Sdim VarSetOperationType op = eVarSetOperationAssign) override; 46218885Sdim Status 47218885Sdim SetValueFromString(const char *, 48218885Sdim VarSetOperationType = eVarSetOperationAssign) = delete; 49218885Sdim 50218885Sdim bool Clear() override { 51218885Sdim m_current_value = m_default_value; 52218885Sdim m_value_was_set = false; 53218885Sdim return true; 54218885Sdim } 55218885Sdim 56218885Sdim lldb::OptionValueSP DeepCopy() const override; 57218885Sdim 58218885Sdim void AutoComplete(CommandInterpreter &interpreter, 59218885Sdim CompletionRequest &request) override; 60218885Sdim 61218885Sdim // Subclass specific functions 62218885Sdim 63218885Sdim enum_type operator=(enum_type value) { 64218885Sdim m_current_value = value; 65218885Sdim return m_current_value; 66218885Sdim } 67218885Sdim 68218885Sdim enum_type GetCurrentValue() const { return m_current_value; } 69218885Sdim 70218885Sdim enum_type GetDefaultValue() const { return m_default_value; } 71218885Sdim 72218885Sdim void SetCurrentValue(enum_type value) { m_current_value = value; } 73218885Sdim 74218885Sdim void SetDefaultValue(enum_type value) { m_default_value = value; } 75218885Sdim 76218885Sdimprotected: 77218885Sdim void SetEnumerations(const OptionEnumValues &enumerators); 78218885Sdim 79218885Sdim enum_type m_current_value; 80218885Sdim enum_type m_default_value; 81218885Sdim EnumerationMap m_enumerations; 82218885Sdim}; 83218885Sdim 84218885Sdim} // namespace lldb_private 85218885Sdim 86218885Sdim#endif // liblldb_OptionValueEnumeration_h_ 87218885Sdim