1254721Semaste//===-- OptionValueString.h --------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef liblldb_OptionValueString_h_ 11254721Semaste#define liblldb_OptionValueString_h_ 12254721Semaste 13254721Semaste// C Includes 14254721Semaste// C++ Includes 15254721Semaste#include <string> 16254721Semaste 17254721Semaste// Other libraries and framework includes 18254721Semaste// Project includes 19254721Semaste#include "lldb/Core/Flags.h" 20254721Semaste#include "lldb/Interpreter/OptionValue.h" 21254721Semaste 22254721Semastenamespace lldb_private { 23254721Semaste 24254721Semasteclass OptionValueString : public OptionValue 25254721Semaste{ 26254721Semastepublic: 27254721Semaste 28254721Semaste typedef Error (*ValidatorCallback) (const char* string, 29254721Semaste void* baton); 30254721Semaste 31254721Semaste enum Options 32254721Semaste { 33254721Semaste eOptionEncodeCharacterEscapeSequences = (1u << 0) 34254721Semaste }; 35254721Semaste 36254721Semaste OptionValueString () : 37254721Semaste OptionValue(), 38254721Semaste m_current_value (), 39254721Semaste m_default_value (), 40254721Semaste m_options(), 41254721Semaste m_validator(), 42254721Semaste m_validator_baton() 43254721Semaste { 44254721Semaste } 45254721Semaste 46254721Semaste OptionValueString (ValidatorCallback validator, 47254721Semaste void* baton = NULL) : 48254721Semaste OptionValue(), 49254721Semaste m_current_value (), 50254721Semaste m_default_value (), 51254721Semaste m_options(), 52254721Semaste m_validator(validator), 53254721Semaste m_validator_baton(baton) 54254721Semaste { 55254721Semaste } 56254721Semaste 57254721Semaste OptionValueString (const char *value) : 58254721Semaste OptionValue(), 59254721Semaste m_current_value (), 60254721Semaste m_default_value (), 61254721Semaste m_options(), 62254721Semaste m_validator(), 63254721Semaste m_validator_baton() 64254721Semaste { 65254721Semaste if (value && value[0]) 66254721Semaste { 67254721Semaste m_current_value.assign (value); 68254721Semaste m_default_value.assign (value); 69254721Semaste } 70254721Semaste } 71254721Semaste 72254721Semaste OptionValueString (const char *current_value, 73254721Semaste const char *default_value) : 74254721Semaste OptionValue(), 75254721Semaste m_current_value (), 76254721Semaste m_default_value (), 77254721Semaste m_options(), 78254721Semaste m_validator(), 79254721Semaste m_validator_baton() 80254721Semaste { 81254721Semaste if (current_value && current_value[0]) 82254721Semaste m_current_value.assign (current_value); 83254721Semaste if (default_value && default_value[0]) 84254721Semaste m_default_value.assign (default_value); 85254721Semaste } 86254721Semaste 87254721Semaste OptionValueString (const char *value, 88254721Semaste ValidatorCallback validator, 89254721Semaste void* baton = NULL) : 90254721Semaste OptionValue(), 91254721Semaste m_current_value (), 92254721Semaste m_default_value (), 93254721Semaste m_options(), 94254721Semaste m_validator(validator), 95254721Semaste m_validator_baton(baton) 96254721Semaste { 97254721Semaste if (value && value[0]) 98254721Semaste { 99254721Semaste m_current_value.assign (value); 100254721Semaste m_default_value.assign (value); 101254721Semaste } 102254721Semaste } 103254721Semaste 104254721Semaste OptionValueString (const char *current_value, 105254721Semaste const char *default_value, 106254721Semaste ValidatorCallback validator, 107254721Semaste void* baton = NULL) : 108254721Semaste OptionValue(), 109254721Semaste m_current_value (), 110254721Semaste m_default_value (), 111254721Semaste m_options(), 112254721Semaste m_validator(validator), 113254721Semaste m_validator_baton(baton) 114254721Semaste { 115254721Semaste if (current_value && current_value[0]) 116254721Semaste m_current_value.assign (current_value); 117254721Semaste if (default_value && default_value[0]) 118254721Semaste m_default_value.assign (default_value); 119254721Semaste } 120254721Semaste 121254721Semaste virtual 122254721Semaste ~OptionValueString() 123254721Semaste { 124254721Semaste } 125254721Semaste 126254721Semaste //--------------------------------------------------------------------- 127254721Semaste // Virtual subclass pure virtual overrides 128254721Semaste //--------------------------------------------------------------------- 129254721Semaste 130254721Semaste virtual OptionValue::Type 131254721Semaste GetType () const 132254721Semaste { 133254721Semaste return eTypeString; 134254721Semaste } 135254721Semaste 136254721Semaste virtual void 137254721Semaste DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask); 138254721Semaste 139254721Semaste virtual Error 140254721Semaste SetValueFromCString (const char *value, 141254721Semaste VarSetOperationType op = eVarSetOperationAssign); 142254721Semaste 143254721Semaste virtual bool 144254721Semaste Clear () 145254721Semaste { 146254721Semaste m_current_value = m_default_value; 147254721Semaste m_value_was_set = false; 148254721Semaste return true; 149254721Semaste } 150254721Semaste 151254721Semaste virtual lldb::OptionValueSP 152254721Semaste DeepCopy () const; 153254721Semaste 154254721Semaste //--------------------------------------------------------------------- 155254721Semaste // Subclass specific functions 156254721Semaste //--------------------------------------------------------------------- 157254721Semaste 158254721Semaste Flags & 159254721Semaste GetOptions () 160254721Semaste { 161254721Semaste return m_options; 162254721Semaste } 163254721Semaste 164254721Semaste const Flags & 165254721Semaste GetOptions () const 166254721Semaste { 167254721Semaste return m_options; 168254721Semaste } 169254721Semaste 170254721Semaste const char * 171254721Semaste operator = (const char *value) 172254721Semaste { 173254721Semaste SetCurrentValue(value); 174254721Semaste return m_current_value.c_str(); 175254721Semaste } 176254721Semaste 177254721Semaste const char * 178254721Semaste GetCurrentValue() const 179254721Semaste { 180254721Semaste return m_current_value.c_str(); 181254721Semaste } 182254721Semaste 183254721Semaste const char * 184254721Semaste GetDefaultValue() const 185254721Semaste { 186254721Semaste return m_default_value.c_str(); 187254721Semaste } 188254721Semaste 189254721Semaste Error 190254721Semaste SetCurrentValue (const char *value); 191254721Semaste 192254721Semaste Error 193254721Semaste AppendToCurrentValue (const char *value); 194254721Semaste 195254721Semaste void 196254721Semaste SetDefaultValue (const char *value) 197254721Semaste { 198254721Semaste if (value && value[0]) 199254721Semaste m_default_value.assign (value); 200254721Semaste else 201254721Semaste m_default_value.clear(); 202254721Semaste } 203254721Semaste 204254721Semaste bool 205254721Semaste IsCurrentValueEmpty () const 206254721Semaste { 207254721Semaste return m_current_value.empty(); 208254721Semaste } 209254721Semaste 210254721Semaste bool 211254721Semaste IsDefaultValueEmpty () const 212254721Semaste { 213254721Semaste return m_default_value.empty(); 214254721Semaste } 215254721Semaste 216254721Semaste 217254721Semasteprotected: 218254721Semaste std::string m_current_value; 219254721Semaste std::string m_default_value; 220254721Semaste Flags m_options; 221254721Semaste ValidatorCallback m_validator; 222254721Semaste void* m_validator_baton; 223254721Semaste}; 224254721Semaste 225254721Semaste} // namespace lldb_private 226254721Semaste 227254721Semaste#endif // liblldb_OptionValueString_h_ 228