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