1 //===-- OptionValueString.h -------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_INTERPRETER_OPTIONVALUESTRING_H 10 #define LLDB_INTERPRETER_OPTIONVALUESTRING_H 11 12 #include <string> 13 14 #include "lldb/Utility/Flags.h" 15 16 #include "lldb/Interpreter/OptionValue.h" 17 18 namespace lldb_private { 19 20 class OptionValueString : public OptionValue { 21 public: 22 typedef Status (*ValidatorCallback)(const char *string, void *baton); 23 24 enum Options { eOptionEncodeCharacterEscapeSequences = (1u << 0) }; 25 OptionValueString()26 OptionValueString() 27 : OptionValue(), m_current_value(), m_default_value(), m_options(), 28 m_validator(), m_validator_baton() {} 29 30 OptionValueString(ValidatorCallback validator, void *baton = nullptr) OptionValue()31 : OptionValue(), m_current_value(), m_default_value(), m_options(), 32 m_validator(validator), m_validator_baton(baton) {} 33 OptionValueString(const char * value)34 OptionValueString(const char *value) 35 : OptionValue(), m_current_value(), m_default_value(), m_options(), 36 m_validator(), m_validator_baton() { 37 if (value && value[0]) { 38 m_current_value.assign(value); 39 m_default_value.assign(value); 40 } 41 } 42 OptionValueString(const char * current_value,const char * default_value)43 OptionValueString(const char *current_value, const char *default_value) 44 : OptionValue(), m_current_value(), m_default_value(), m_options(), 45 m_validator(), m_validator_baton() { 46 if (current_value && current_value[0]) 47 m_current_value.assign(current_value); 48 if (default_value && default_value[0]) 49 m_default_value.assign(default_value); 50 } 51 52 OptionValueString(const char *value, ValidatorCallback validator, 53 void *baton = nullptr) OptionValue()54 : OptionValue(), m_current_value(), m_default_value(), m_options(), 55 m_validator(validator), m_validator_baton(baton) { 56 if (value && value[0]) { 57 m_current_value.assign(value); 58 m_default_value.assign(value); 59 } 60 } 61 62 OptionValueString(const char *current_value, const char *default_value, 63 ValidatorCallback validator, void *baton = nullptr) OptionValue()64 : OptionValue(), m_current_value(), m_default_value(), m_options(), 65 m_validator(validator), m_validator_baton(baton) { 66 if (current_value && current_value[0]) 67 m_current_value.assign(current_value); 68 if (default_value && default_value[0]) 69 m_default_value.assign(default_value); 70 } 71 72 ~OptionValueString() override = default; 73 74 // Virtual subclass pure virtual overrides 75 GetType()76 OptionValue::Type GetType() const override { return eTypeString; } 77 78 void DumpValue(const ExecutionContext *exe_ctx, Stream &strm, 79 uint32_t dump_mask) override; 80 81 Status 82 SetValueFromString(llvm::StringRef value, 83 VarSetOperationType op = eVarSetOperationAssign) override; 84 Status 85 SetValueFromString(const char *, 86 VarSetOperationType = eVarSetOperationAssign) = delete; 87 Clear()88 void Clear() override { 89 m_current_value = m_default_value; 90 m_value_was_set = false; 91 } 92 93 lldb::OptionValueSP DeepCopy() const override; 94 95 // Subclass specific functions 96 GetOptions()97 Flags &GetOptions() { return m_options; } 98 GetOptions()99 const Flags &GetOptions() const { return m_options; } 100 101 const char *operator=(const char *value) { 102 SetCurrentValue(llvm::StringRef::withNullAsEmpty(value)); 103 return m_current_value.c_str(); 104 } 105 GetCurrentValue()106 const char *GetCurrentValue() const { return m_current_value.c_str(); } GetCurrentValueAsRef()107 llvm::StringRef GetCurrentValueAsRef() const { return m_current_value; } 108 GetDefaultValue()109 const char *GetDefaultValue() const { return m_default_value.c_str(); } GetDefaultValueAsRef()110 llvm::StringRef GetDefaultValueAsRef() const { return m_default_value; } 111 112 Status SetCurrentValue(const char *) = delete; 113 Status SetCurrentValue(llvm::StringRef value); 114 115 Status AppendToCurrentValue(const char *value); 116 SetDefaultValue(const char * value)117 void SetDefaultValue(const char *value) { 118 if (value && value[0]) 119 m_default_value.assign(value); 120 else 121 m_default_value.clear(); 122 } 123 IsCurrentValueEmpty()124 bool IsCurrentValueEmpty() const { return m_current_value.empty(); } 125 IsDefaultValueEmpty()126 bool IsDefaultValueEmpty() const { return m_default_value.empty(); } 127 128 protected: 129 std::string m_current_value; 130 std::string m_default_value; 131 Flags m_options; 132 ValidatorCallback m_validator; 133 void *m_validator_baton; 134 }; 135 136 } // namespace lldb_private 137 138 #endif // LLDB_INTERPRETER_OPTIONVALUESTRING_H 139