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