1 //===-- OptionValueArch.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_OPTIONVALUEARCH_H
10 #define LLDB_INTERPRETER_OPTIONVALUEARCH_H
11 
12 #include "lldb/Interpreter/OptionValue.h"
13 #include "lldb/Utility/ArchSpec.h"
14 #include "lldb/Utility/CompletionRequest.h"
15 
16 namespace lldb_private {
17 
18 class OptionValueArch : public Cloneable<OptionValueArch, OptionValue> {
19 public:
20   OptionValueArch() = default;
21 
22   OptionValueArch(const char *triple) : m_current_value(triple) {
23     m_default_value = m_current_value;
24   }
25 
26   OptionValueArch(const ArchSpec &value)
27       : m_current_value(value), m_default_value(value) {}
28 
29   OptionValueArch(const ArchSpec &current_value, const ArchSpec &default_value)
30       : m_current_value(current_value), m_default_value(default_value) {}
31 
32   ~OptionValueArch() override = default;
33 
34   // Virtual subclass pure virtual overrides
35 
36   OptionValue::Type GetType() const override { return eTypeArch; }
37 
38   void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
39                  uint32_t dump_mask) override;
40 
41   Status
42   SetValueFromString(llvm::StringRef value,
43                      VarSetOperationType op = eVarSetOperationAssign) override;
44 
45   void Clear() override {
46     m_current_value = m_default_value;
47     m_value_was_set = false;
48   }
49 
50   void AutoComplete(CommandInterpreter &interpreter,
51                     lldb_private::CompletionRequest &request) override;
52 
53   // Subclass specific functions
54 
55   ArchSpec &GetCurrentValue() { return m_current_value; }
56 
57   const ArchSpec &GetCurrentValue() const { return m_current_value; }
58 
59   const ArchSpec &GetDefaultValue() const { return m_default_value; }
60 
61   void SetCurrentValue(const ArchSpec &value, bool set_value_was_set) {
62     m_current_value = value;
63     if (set_value_was_set)
64       m_value_was_set = true;
65   }
66 
67   void SetDefaultValue(const ArchSpec &value) { m_default_value = value; }
68 
69 protected:
70   ArchSpec m_current_value;
71   ArchSpec m_default_value;
72 };
73 
74 } // namespace lldb_private
75 
76 #endif // LLDB_INTERPRETER_OPTIONVALUEARCH_H
77