UserSettingsController.h revision 73844aa19a7360b662e2be710fc3c969d6c86606
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// C Includes
14// C++ Includes
15
16#include <string>
17#include <vector>
18
19// Other libraries and framework includes
20// Project includes
21
22#include "lldb/lldb-private.h"
23#include "lldb/Core/ConstString.h"
24#include "lldb/Core/StringList.h"
25#include "lldb/Core/Stream.h"
26#include "lldb/Core/StreamString.h"
27#include "lldb/Host/Mutex.h"
28#include "lldb/Interpreter/OptionValue.h"
29
30namespace lldb_private {
31
32
33//typedef struct
34//{
35//    lldb::UserSettingsControllerSP parent;
36//    ConstString level_name;
37//    std::vector<SettingEntry> global_settings;
38//    std::vector<SettingEntry> instance_settings;
39//} UserSettingDefinition;
40//
41
42class Properties
43{
44public:
45    Properties () :
46        m_collection_sp ()
47    {
48    }
49
50    Properties (const lldb::OptionValuePropertiesSP &collection_sp) :
51        m_collection_sp (collection_sp)
52    {
53    }
54
55    virtual
56    ~Properties()
57    {
58    }
59
60    virtual lldb::OptionValuePropertiesSP
61    GetValueProperties () const
62    {
63        // This function is virtual in case subclasses want to lazily
64        // implement creating the properties.
65        return m_collection_sp;
66    }
67
68    virtual lldb::OptionValueSP
69    GetPropertyValue (const ExecutionContext *exe_ctx,
70                      const char *property_path,
71                      bool will_modify,
72                      Error &error) const;
73
74    virtual Error
75    SetPropertyValue (const ExecutionContext *exe_ctx,
76                      VarSetOperationType op,
77                      const char *property_path,
78                      const char *value);
79
80    virtual Error
81    DumpPropertyValue (const ExecutionContext *exe_ctx,
82                       Stream &strm,
83                       const char *property_path,
84                       uint32_t dump_mask);
85
86    virtual void
87    DumpAllPropertyValues (const ExecutionContext *exe_ctx,
88                           Stream &strm,
89                           uint32_t dump_mask);
90
91    virtual void
92    DumpAllDescriptions (CommandInterpreter &interpreter,
93                         Stream &strm) const;
94
95    size_t
96    Apropos (const char *keyword,
97             std::vector<const Property *> &matching_properties) const;
98
99protected:
100    lldb::OptionValuePropertiesSP m_collection_sp;
101};
102
103//class UserSettingsController :
104//    public STD_ENABLE_SHARED_FROM_THIS(UserSettingsController)
105//{
106//public:
107//
108//    UserSettingsController (const char *level_name,
109//                            const lldb::UserSettingsControllerSP &parent);
110//
111//    virtual
112//    ~UserSettingsController ();
113//
114//    // Pure virtual functions, which all sub-classes must implement.
115//    virtual lldb::InstanceSettingsSP
116//    CreateInstanceSettings (const char *instance_name) = 0;
117//
118//    // Virtual functions that you can override if you have global settings
119//    // (not instance specific).
120//    virtual bool
121//    SetGlobalVariable (const ConstString &var_name,
122//                       const char *index_value,
123//                       const char *value,
124//                       const SettingEntry &entry,
125//                       const VarSetOperationType op,
126//                       Error &err);
127//
128//    virtual bool
129//    GetGlobalVariable (const ConstString &var_name,
130//                       StringList &value,
131//                       Error &err);
132//
133//    // End of pure virtual functions.
134//    StringList
135//    GetVariable (const char *full_dot_name,
136//                 SettableVariableType &var_type,
137//                 const char *debugger_instance_name,
138//                 Error &err);
139//
140//    Error
141//    SetVariable (const char *full_dot_name,
142//                 const char *value,
143//                 const VarSetOperationType op,
144//                 const bool override,
145//                 const char *debugger_instance_name,
146//                 const char *index_value = NULL);
147//
148//    const lldb::UserSettingsControllerSP &
149//    GetParent ();
150//
151//    const ConstString &
152//    GetLevelName ();
153//
154//    void
155//    RegisterChild (const lldb::UserSettingsControllerSP &child);
156//
157//    void
158//    RemoveChild (const lldb::UserSettingsControllerSP &child);
159//
160//    void
161//    CreateSettingsVector (const SettingEntry *table,
162//                          const bool global);
163//
164//    void
165//    CreateDefaultInstanceSettings ();
166//
167//    void
168//    InitializeGlobalVariables ();
169//
170//    const lldb::InstanceSettingsSP &
171//    FindPendingSettings (const ConstString &instance_name);
172//
173//    void
174//    RemovePendingSettings (const ConstString &instance_name);
175//
176//    void
177//    RegisterInstanceSettings (InstanceSettings *instance_settings);
178//
179//    void
180//    UnregisterInstanceSettings (InstanceSettings *instance_settings);
181//
182//    void
183//    RenameInstanceSettings (const char *old_name, const char *new_name);
184//
185//    void
186//    SetDefaultInstanceSettings (const lldb::InstanceSettingsSP &instance_settings_sp)
187//    {
188//        m_default_settings = instance_settings_sp;
189//    }
190//    // -------------------------------------------------------------------------
191//    // Public static methods
192//    // -------------------------------------------------------------------------
193//
194//    static void
195//    FindAllSettingsDescriptions (CommandInterpreter &interpreter,
196//                                 const lldb::UserSettingsControllerSP& usc_sp,
197//                                 const char *current_prefix,
198//                                 Stream &result_stream,
199//                                 Error &err);
200//
201//    static void
202//    FindSettingsDescriptions (CommandInterpreter &interpreter,
203//                              const lldb::UserSettingsControllerSP& usc_sp,
204//                              const char *current_prefix,
205//                              const char *search_name,
206//                              Stream &result_stream,
207//                              Error &err);
208//
209//    static void
210//    SearchAllSettingsDescriptions (CommandInterpreter &interpreter,
211//                                   const lldb::UserSettingsControllerSP& usc_sp,
212//                                   const char *current_prefix,
213//                                   const char *search_word,
214//                                   Stream &result_stream);
215//
216//    static void
217//    GetAllVariableValues (CommandInterpreter &interpreter,
218//                          const lldb::UserSettingsControllerSP& usc_sp,
219//                          const char *current_prefix,
220//                          Stream &result_stream,
221//                          Error &err);
222//
223//    static bool
224//    DumpValue (CommandInterpreter &interpreter,
225//               const lldb::UserSettingsControllerSP& usc_sp,
226//               const char *variable_dot_name,
227//               Stream &strm);
228//
229//    static bool
230//    DumpValue (const char *variable_dot_name,
231//               SettableVariableType var_type,
232//               const StringList &variable_value,
233//               Stream &strm);
234//
235//    static int
236//    CompleteSettingsNames (const lldb::UserSettingsControllerSP& usc_sp,
237//                           Args &partial_setting_name_pieces,
238//                           bool &word_complete,
239//                           StringList &matches);
240//
241//    static int
242//    CompleteSettingsValue (const lldb::UserSettingsControllerSP& usc_sp,
243//                           const char *full_dot_name,
244//                           const char *partial_value,
245//                           bool &word_complete,
246//                           StringList &matches);
247//
248//    static Args
249//    BreakNameIntoPieces (const char *full_dot_name);
250//
251//    static const char *
252//    GetTypeString (SettableVariableType var_type);
253//
254//
255//    static const char *
256//    EnumToString (const OptionEnumValueElement *enum_values, int value);
257//
258//    static void
259//    UpdateStringVariable (VarSetOperationType op,
260//                          std::string &string_var,
261//                          const char *new_value,
262//                          Error &err);
263//
264//
265//    static void
266//    UpdateBooleanVariable (VarSetOperationType op,
267//                           bool &bool_var,
268//                           const char *new_value,
269//                           bool clear_value, // Used for op == eVarSetOperationClear
270//                           Error &err);
271//
272//    static void
273//    UpdateStringArrayVariable (VarSetOperationType op,
274//                               const char *index_value,
275//                               Args &array_var,
276//                               const char *new_value,
277//                               Error &err);
278//
279//    static void
280//    UpdateDictionaryVariable (VarSetOperationType op,
281//                              const char *index_value,
282//                              std::map<std::string, std::string> &dictionary,
283//                              const char *new_value,
284//                              Error &err);
285//
286//    static void
287//    UpdateEnumVariable (OptionEnumValueElement *enum_values,
288//                        int *enum_var,
289//                        const char *new_value,
290//                        Error &err);
291//
292//    static Error
293//    UpdateStringOptionValue (const char *new_value_cstr,
294//                             VarSetOperationType op,
295//                             OptionValueString &option_value);
296//
297//    static Error
298//    UpdateBooleanOptionValue (const char *new_value_cstr,
299//                              VarSetOperationType op,
300//                              OptionValueBoolean &option_value);
301//
302//    static Error
303//    UpdateFileSpecOptionValue (const char *new_value_cstr,
304//                               VarSetOperationType op,
305//                               OptionValueFileSpec &option_value);
306//
307//    static bool
308//    InitializeSettingsController (lldb::UserSettingsControllerSP &controller_sp,
309//                                  SettingEntry *global_settings,
310//                                  SettingEntry *instance_settings);
311//
312//    static void
313//    FinalizeSettingsController (lldb::UserSettingsControllerSP &controller_sp);
314//
315//
316//    lldb::InstanceSettingsSP
317//    GetDefaultInstanceSettings ()
318//    {
319//        return m_default_settings;
320//    }
321//
322//protected:
323//
324//    // -------------------------------------------------------------------------
325//    // Protected methods are declared below here.
326//    // -------------------------------------------------------------------------
327//
328//    bool
329//    IsLiveInstance (const std::string &instance_name);
330//
331//    int
332//    GlobalVariableMatches (const char *partial_name,
333//                           const std::string &complete_prefix,
334//                           StringList &matches);
335//
336//    int
337//    InstanceVariableMatches (const char *partial_name,
338//                             const std::string &complete_prefix,
339//                             const char *instance_name,
340//                             StringList &matches);
341//
342//    int
343//    LiveInstanceMatches (const char *partial_name,
344//                         const std::string &complete_prefix,
345//                         bool &word_complete,
346//                         StringList &matches);
347//
348//    int
349//    ChildMatches (const char *partial_name,
350//                  const std::string &complete_prefix,
351//                  bool &word_complete,
352//                  StringList &matches);
353//
354//
355//    size_t
356//    GetNumChildren ();
357//
358//    const lldb::UserSettingsControllerSP
359//    GetChildAtIndex (size_t index);
360//
361//
362//    const SettingEntry *
363//    GetGlobalEntry (const ConstString &var_name);
364//
365//    const SettingEntry *
366//    GetInstanceEntry (const ConstString &var_name);
367//
368//    void
369//    BuildParentPrefix (std::string &parent_prefix);
370//
371//
372//    void
373//    CopyDefaultSettings (const lldb::InstanceSettingsSP &new_settings,
374//                         const ConstString &instance_name,
375//                         bool pending);
376//
377//    lldb::InstanceSettingsSP
378//    PendingSettingsForInstance (const ConstString &instance_name);
379//
380//    InstanceSettings *
381//    FindSettingsForInstance (const ConstString &instance_name);
382//
383//    void
384//    GetAllPendingSettingValues (Stream &result_stream);
385//
386//    void
387//    GetAllDefaultSettingValues (Stream &result_stream);
388//
389//    void
390//    GetAllInstanceVariableValues (CommandInterpreter &interpreter,
391//                                  Stream &result_stream);
392//
393//    void
394//    OverrideAllInstances (const ConstString &var_name,
395//                          const char *value,
396//                          VarSetOperationType op,
397//                          const char *index_value,
398//                          Error &err);
399//
400//    UserSettingDefinition &
401//    GetControllerSettings () { return m_settings; }
402//
403//    // -------------------------------------------------------------------------
404//    // Static protected methods are declared below here.
405//    // -------------------------------------------------------------------------
406//
407//    static void
408//    PrintEnumValues (const OptionEnumValueElement *enum_values,
409//                     Stream &str);
410//
411//
412//    static int
413//    BooleanMatches (const char *partial_value,
414//                    bool &word_complete,
415//                    StringList &matches);
416//
417//    static int
418//    EnumMatches (const char *partial_value,
419//                 OptionEnumValueElement *enum_values,
420//                 bool &word_complete,
421//                 StringList &matches);
422//
423//    static void
424//    VerifyOperationForType (SettableVariableType var_type,
425//                            VarSetOperationType op,
426//                            const ConstString &var_name,
427//                            Error &err);
428//
429//    // This is protected rather than private so that classes that inherit from UserSettingsController can access it.
430//
431//    lldb::InstanceSettingsSP m_default_settings;
432//
433//private:
434//
435//    UserSettingDefinition m_settings;
436//
437//    typedef std::map<std::string,InstanceSettings*> InstanceSettingsMap;
438//
439//    std::vector<lldb::UserSettingsControllerSP> m_children;
440//    std::map <std::string, lldb::InstanceSettingsSP> m_pending_settings;
441//    InstanceSettingsMap m_live_settings;    // live settings should never be NULL (hence 'live')
442//    mutable Mutex m_children_mutex;
443//    mutable Mutex m_pending_settings_mutex;
444//    mutable Mutex m_live_settings_mutex;
445//
446//    DISALLOW_COPY_AND_ASSIGN (UserSettingsController);
447//};
448//
449//class InstanceSettings
450//{
451//public:
452//
453//    InstanceSettings (const lldb::UserSettingsControllerSP &owner_sp, const char *instance_name, bool live_instance = true);
454//
455//    InstanceSettings (const InstanceSettings &rhs);
456//
457//    virtual
458//    ~InstanceSettings ();
459//
460//    InstanceSettings&
461//    operator= (const InstanceSettings &rhs);
462//
463//    // Begin Pure Virtual Functions
464//
465//    virtual void
466//    UpdateInstanceSettingsVariable (const ConstString &var_name,
467//                                    const char *index_value,
468//                                    const char *value,
469//                                    const ConstString &instance_name,
470//                                    const SettingEntry &entry,
471//                                    VarSetOperationType op,
472//                                    Error &err,
473//                                    bool pending) = 0;
474//
475//    virtual bool
476//    GetInstanceSettingsValue (const SettingEntry &entry,
477//                              const ConstString &var_name,
478//                              StringList &value,
479//                              Error *err) = 0;
480//
481//    virtual void
482//    CopyInstanceSettings (const lldb::InstanceSettingsSP &new_settings,
483//                          bool pending) = 0;
484//
485//    virtual const ConstString
486//    CreateInstanceName () = 0;
487//
488//    // End Pure Virtual Functions
489//
490//    const ConstString &
491//    GetInstanceName () { return m_instance_name; }
492//
493//
494//    void
495//    ChangeInstanceName (const std::string &new_instance_name);
496//
497//    static const ConstString &
498//    GetDefaultName ();
499//
500//    static const ConstString &
501//    InvalidName ();
502//
503//protected:
504//
505//    lldb::UserSettingsControllerWP m_owner_wp;
506//    ConstString m_instance_name;
507//};
508//
509
510
511} // namespace lldb_private
512
513#endif // liblldb_UserSettingsController_h_
514