1254721Semaste//===-- OptionValueEnumeration.h --------------------------------*- C++ -*-===// 2254721Semaste// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6254721Semaste// 7254721Semaste//===----------------------------------------------------------------------===// 8254721Semaste 9254721Semaste#ifndef liblldb_OptionValueEnumeration_h_ 10254721Semaste#define liblldb_OptionValueEnumeration_h_ 11254721Semaste 12254721Semaste#include "lldb/Core/UniqueCStringMap.h" 13254721Semaste#include "lldb/Interpreter/OptionValue.h" 14321369Sdim#include "lldb/Utility/ConstString.h" 15321369Sdim#include "lldb/Utility/Status.h" 16321369Sdim#include "lldb/Utility/Stream.h" 17321369Sdim#include "lldb/Utility/StreamString.h" 18321369Sdim#include "lldb/lldb-private-types.h" 19254721Semaste 20254721Semastenamespace lldb_private { 21254721Semaste 22314564Sdimclass OptionValueEnumeration : public OptionValue { 23254721Semastepublic: 24314564Sdim typedef int64_t enum_type; 25314564Sdim struct EnumeratorInfo { 26314564Sdim enum_type value; 27314564Sdim const char *description; 28314564Sdim }; 29314564Sdim typedef UniqueCStringMap<EnumeratorInfo> EnumerationMap; 30314564Sdim typedef EnumerationMap::Entry EnumerationMapEntry; 31254721Semaste 32344779Sdim OptionValueEnumeration(const OptionEnumValues &enumerators, enum_type value); 33254721Semaste 34314564Sdim ~OptionValueEnumeration() override; 35314564Sdim 36314564Sdim // Virtual subclass pure virtual overrides 37314564Sdim 38314564Sdim OptionValue::Type GetType() const override { return eTypeEnum; } 39314564Sdim 40314564Sdim void DumpValue(const ExecutionContext *exe_ctx, Stream &strm, 41314564Sdim uint32_t dump_mask) override; 42314564Sdim 43321369Sdim Status 44314564Sdim SetValueFromString(llvm::StringRef value, 45314564Sdim VarSetOperationType op = eVarSetOperationAssign) override; 46321369Sdim Status 47314564Sdim SetValueFromString(const char *, 48314564Sdim VarSetOperationType = eVarSetOperationAssign) = delete; 49314564Sdim 50314564Sdim bool Clear() override { 51314564Sdim m_current_value = m_default_value; 52314564Sdim m_value_was_set = false; 53314564Sdim return true; 54314564Sdim } 55314564Sdim 56314564Sdim lldb::OptionValueSP DeepCopy() const override; 57314564Sdim 58360784Sdim void AutoComplete(CommandInterpreter &interpreter, 59360784Sdim CompletionRequest &request) override; 60314564Sdim 61314564Sdim // Subclass specific functions 62314564Sdim 63314564Sdim enum_type operator=(enum_type value) { 64314564Sdim m_current_value = value; 65314564Sdim return m_current_value; 66314564Sdim } 67314564Sdim 68314564Sdim enum_type GetCurrentValue() const { return m_current_value; } 69314564Sdim 70314564Sdim enum_type GetDefaultValue() const { return m_default_value; } 71314564Sdim 72314564Sdim void SetCurrentValue(enum_type value) { m_current_value = value; } 73314564Sdim 74314564Sdim void SetDefaultValue(enum_type value) { m_default_value = value; } 75314564Sdim 76254721Semasteprotected: 77344779Sdim void SetEnumerations(const OptionEnumValues &enumerators); 78254721Semaste 79314564Sdim enum_type m_current_value; 80314564Sdim enum_type m_default_value; 81314564Sdim EnumerationMap m_enumerations; 82254721Semaste}; 83254721Semaste 84254721Semaste} // namespace lldb_private 85254721Semaste 86296417Sdim#endif // liblldb_OptionValueEnumeration_h_ 87