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