]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Core/UserSettingsController.h
Merge llvm, clang, compiler-rt, libc++, lld, and lldb release_80 branch
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Core / UserSettingsController.h
1 //====-- UserSettingsController.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_UserSettingsController_h_
11 #define liblldb_UserSettingsController_h_
12
13 #include "lldb/Utility/Status.h"
14 #include "lldb/lldb-forward.h"
15 #include "lldb/lldb-private-enumerations.h"
16
17 #include "llvm/ADT/StringRef.h"
18
19 #include <vector>
20
21 #include <stddef.h>
22 #include <stdint.h>
23
24 namespace lldb_private {
25 class CommandInterpreter;
26 }
27 namespace lldb_private {
28 class ConstString;
29 }
30 namespace lldb_private {
31 class ExecutionContext;
32 }
33 namespace lldb_private {
34 class Property;
35 }
36 namespace lldb_private {
37 class Stream;
38 }
39
40 namespace lldb_private {
41
42 class Properties {
43 public:
44   Properties() : m_collection_sp() {}
45
46   Properties(const lldb::OptionValuePropertiesSP &collection_sp)
47       : m_collection_sp(collection_sp) {}
48
49   virtual ~Properties() {}
50
51   virtual lldb::OptionValuePropertiesSP GetValueProperties() const {
52     // This function is virtual in case subclasses want to lazily implement
53     // creating the properties.
54     return m_collection_sp;
55   }
56
57   virtual lldb::OptionValueSP GetPropertyValue(const ExecutionContext *exe_ctx,
58                                                llvm::StringRef property_path,
59                                                bool will_modify,
60                                                Status &error) const;
61
62   virtual Status SetPropertyValue(const ExecutionContext *exe_ctx,
63                                   VarSetOperationType op,
64                                   llvm::StringRef property_path,
65                                   llvm::StringRef value);
66
67   virtual Status DumpPropertyValue(const ExecutionContext *exe_ctx,
68                                    Stream &strm, llvm::StringRef property_path,
69                                    uint32_t dump_mask);
70
71   virtual void DumpAllPropertyValues(const ExecutionContext *exe_ctx,
72                                      Stream &strm, uint32_t dump_mask);
73
74   virtual void DumpAllDescriptions(CommandInterpreter &interpreter,
75                                    Stream &strm) const;
76
77   size_t Apropos(llvm::StringRef keyword,
78                  std::vector<const Property *> &matching_properties) const;
79
80   lldb::OptionValuePropertiesSP GetSubProperty(const ExecutionContext *exe_ctx,
81                                                const ConstString &name);
82
83   // We sometimes need to introduce a setting to enable experimental features,
84   // but then we don't want the setting for these to cause errors when the
85   // setting goes away.  Add a sub-topic of the settings using this
86   // experimental name, and two things will happen.  One is that settings that
87   // don't find the name will not be treated as errors.  Also, if you decide to
88   // keep the settings just move them into the containing properties, and we
89   // will auto-forward the experimental settings to the real one.
90   static const char *GetExperimentalSettingsName();
91
92   static bool IsSettingExperimental(llvm::StringRef setting);
93
94 protected:
95   lldb::OptionValuePropertiesSP m_collection_sp;
96 };
97
98 } // namespace lldb_private
99
100 #endif // liblldb_UserSettingsController_h_