OptionValueEnumeration.h revision 9f282851b07ff6daee37cd3b1a3fbc43ef11da29
1d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea//===-- OptionValueEnumeration.h --------------------------------*- C++ -*-===//
2d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea//
3d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea//                     The LLVM Compiler Infrastructure
4d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea//
5d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// This file is distributed under the University of Illinois Open Source
6d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// License. See LICENSE.TXT for details.
7d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea//
8d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea//===----------------------------------------------------------------------===//
9d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
10d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#ifndef liblldb_OptionValueEnumeration_h_
11d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#define liblldb_OptionValueEnumeration_h_
12d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
13d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// C Includes
14d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// C++ Includes
15d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// Other libraries and framework includes
16d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea// Project includes
17d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include "lldb/Core/ConstString.h"
18d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include "lldb/Core/Error.h"
19d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include "lldb/Core/Stream.h"
20d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include "lldb/Core/StreamString.h"
21d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include "lldb/Core/UniqueCStringMap.h"
22d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea#include "lldb/Interpreter/OptionValue.h"
23d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
24d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleanamespace lldb_private {
25d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
26d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
27d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleaclass OptionValueEnumeration : public OptionValue
28d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea{
29d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Maleapublic:
30d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    typedef int64_t enum_type;
31d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    struct EnumeratorInfo
32d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    {
33d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        enum_type value;
34d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        const char *description;
35d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    };
36d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    typedef UniqueCStringMap<EnumeratorInfo> EnumerationMap;
37d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    typedef typename EnumerationMap::Entry EnumerationMapEntry;
38d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
39d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    OptionValueEnumeration (const OptionEnumValueElement *enumerators, enum_type value);
40d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
41d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    virtual
42d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    ~OptionValueEnumeration();
43d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
44d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    //---------------------------------------------------------------------
45d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    // Virtual subclass pure virtual overrides
46d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    //---------------------------------------------------------------------
47d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
48d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    virtual OptionValue::Type
49d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    GetType () const
50d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    {
51d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        return eTypeEnum;
52d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    }
53d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
54d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    virtual void
55d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask);
56d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
57d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    virtual Error
58d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    SetValueFromCString (const char *value,
59d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea                         VarSetOperationType op = eVarSetOperationAssign);
60d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea
61d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    virtual bool
62d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    Clear ()
63d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea    {
64d2771ed2249c645019b7b1e46bdd677d2ed1cfe1Daniel Malea        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
92    GetCurrentValue() const
93    {
94        return m_current_value;
95    }
96
97    enum_type
98    GetDefaultValue() const
99    {
100        return m_default_value;
101    }
102
103    void
104    SetCurrentValue (enum_type value)
105    {
106        m_current_value = value;
107    }
108
109    void
110    SetDefaultValue (enum_type value)
111    {
112        m_default_value = value;
113    }
114
115protected:
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