1//===-- OptionValueArch.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_OptionValueArch_h_
11#define liblldb_OptionValueArch_h_
12
13// C Includes
14// C++ Includes
15// Other libraries and framework includes
16// Project includes
17#include "lldb/Core/ArchSpec.h"
18#include "lldb/Interpreter/OptionValue.h"
19
20namespace lldb_private {
21
22class OptionValueArch : public OptionValue
23{
24public:
25    OptionValueArch () :
26        OptionValue(),
27        m_current_value (),
28        m_default_value ()
29    {
30    }
31
32    OptionValueArch (const char *triple) :
33        OptionValue(),
34        m_current_value (triple),
35        m_default_value ()
36    {
37        m_default_value = m_current_value;
38    }
39
40    OptionValueArch (const ArchSpec &value) :
41        OptionValue(),
42        m_current_value (value),
43        m_default_value (value)
44    {
45    }
46
47    OptionValueArch (const ArchSpec &current_value,
48                     const ArchSpec &default_value) :
49        OptionValue(),
50        m_current_value (current_value),
51        m_default_value (default_value)
52    {
53    }
54
55    virtual
56    ~OptionValueArch()
57    {
58    }
59
60    //---------------------------------------------------------------------
61    // Virtual subclass pure virtual overrides
62    //---------------------------------------------------------------------
63
64    virtual OptionValue::Type
65    GetType () const
66    {
67        return eTypeArch;
68    }
69
70    virtual void
71    DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask);
72
73    virtual Error
74    SetValueFromCString (const char *value,
75                         VarSetOperationType op = eVarSetOperationAssign);
76
77    virtual bool
78    Clear ()
79    {
80        m_current_value = m_default_value;
81        m_value_was_set = false;
82        return true;
83    }
84
85    virtual lldb::OptionValueSP
86    DeepCopy () const;
87
88    virtual size_t
89    AutoComplete (CommandInterpreter &interpreter,
90                  const char *s,
91                  int match_start_point,
92                  int max_return_elements,
93                  bool &word_complete,
94                  StringList &matches);
95
96    //---------------------------------------------------------------------
97    // Subclass specific functions
98    //---------------------------------------------------------------------
99
100    ArchSpec &
101    GetCurrentValue()
102    {
103        return m_current_value;
104    }
105
106    const ArchSpec &
107    GetCurrentValue() const
108    {
109        return m_current_value;
110    }
111
112    const ArchSpec &
113    GetDefaultValue() const
114    {
115        return m_default_value;
116    }
117
118    void
119    SetCurrentValue (const ArchSpec &value, bool set_value_was_set)
120    {
121        m_current_value = value;
122        if (set_value_was_set)
123            m_value_was_set = true;
124    }
125
126    void
127    SetDefaultValue (const ArchSpec &value)
128    {
129        m_default_value = value;
130    }
131
132protected:
133    ArchSpec m_current_value;
134    ArchSpec m_default_value;
135};
136
137} // namespace lldb_private
138
139#endif  // liblldb_OptionValueArch_h_
140