summaryrefslogtreecommitdiffstats
path: root/lldb/include/lldb/Core/UserSettingsController.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/include/lldb/Core/UserSettingsController.h')
-rw-r--r--lldb/include/lldb/Core/UserSettingsController.h380
1 files changed, 380 insertions, 0 deletions
diff --git a/lldb/include/lldb/Core/UserSettingsController.h b/lldb/include/lldb/Core/UserSettingsController.h
new file mode 100644
index 00000000000..532e9c6cbd7
--- /dev/null
+++ b/lldb/include/lldb/Core/UserSettingsController.h
@@ -0,0 +1,380 @@
+//====-- UserSettingsController.h --------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_UserSettingsController_h_
+#define liblldb_UserSettingsController_h_
+
+// C Includes
+// C++ Includes
+
+#include <string>
+#include <vector>
+
+// Other libraries and framework includes
+// Project includes
+
+#include "lldb/lldb-private.h"
+#include "lldb/Core/ConstString.h"
+#include "lldb/Core/StringList.h"
+#include "lldb/Core/Stream.h"
+#include "lldb/Core/StreamString.h"
+#include "lldb/Host/Mutex.h"
+
+namespace lldb_private {
+
+typedef struct
+{
+ const char *var_name;
+ lldb::SettableVariableType var_type;
+ const char *default_value;
+ lldb::OptionEnumValueElement *enum_values;
+ bool initialized;
+ bool hidden;
+ const char *description; //help text
+} SettingEntry;
+
+
+typedef struct
+{
+ lldb::UserSettingsControllerSP parent;
+ ConstString level_name;
+ std::vector<SettingEntry> global_settings;
+ std::vector<SettingEntry> instance_settings;
+} UserSettingDefinition;
+
+class UserSettingsController
+{
+public:
+
+ UserSettingsController (const char *level_name,
+ const lldb::UserSettingsControllerSP &parent);
+
+ virtual
+ ~UserSettingsController ();
+
+ // Pure virtual functions, which all sub-classes must implement.
+
+ virtual lldb::InstanceSettingsSP
+ CreateNewInstanceSettings () = 0;
+
+ virtual void
+ UpdateGlobalVariable (const ConstString &var_name,
+ const char *index_value,
+ const char *value,
+ const SettingEntry &entry,
+ const lldb::VarSetOperationType op,
+ Error &err) = 0;
+
+ virtual void
+ GetGlobalSettingsValue (const ConstString &var_name,
+ StringList &value) = 0;
+
+ // End of pure virtual functions.
+
+ Error
+ SetVariable (const char *full_dot_name,
+ const char *value,
+ const lldb::VarSetOperationType op,
+ const bool override,
+ const char *index_value = NULL);
+
+ StringList
+ GetVariable (const char *full_dot_name,
+ lldb::SettableVariableType &var_type);
+
+ const lldb::UserSettingsControllerSP &
+ GetParent ();
+
+ const ConstString &
+ GetLevelName ();
+
+ void
+ RegisterChild (const lldb::UserSettingsControllerSP &child);
+
+ void
+ RemoveChild (const lldb::UserSettingsControllerSP &child);
+
+ void
+ CreateSettingsVector (const SettingEntry *table,
+ const bool global);
+
+ void
+ CreateDefaultInstanceSettings ();
+
+ void
+ InitializeGlobalVariables ();
+
+ const lldb::InstanceSettingsSP &
+ FindPendingSettings (const ConstString &instance_name);
+
+ void
+ RemovePendingSettings (const ConstString &instance_name);
+
+ void
+ RegisterInstanceSettings (InstanceSettings *instance_settings);
+
+ void
+ UnregisterInstanceSettings (InstanceSettings *instance_settings);
+
+ // -------------------------------------------------------------------------
+ // Public static methods
+ // -------------------------------------------------------------------------
+
+ static void
+ FindAllSettingsDescriptions (CommandInterpreter &interpreter,
+ lldb::UserSettingsControllerSP root,
+ std::string &current_prefix,
+ StreamString &result_stream,
+ Error &err);
+
+ static void
+ GetAllVariableValues (CommandInterpreter &interpreter,
+ lldb::UserSettingsControllerSP root,
+ std::string &current_prefix,
+ StreamString &result_stream,
+ Error &err);
+
+ static int
+ CompleteSettingsNames (lldb::UserSettingsControllerSP root_settings,
+ Args &partial_setting_name_pieces,
+ bool &word_complete,
+ StringList &matches);
+
+ static int
+ CompleteSettingsValue (lldb::UserSettingsControllerSP root_settings,
+ const char *full_dot_name,
+ const char *partial_value,
+ bool &word_complete,
+ StringList &matches);
+
+ static Args
+ BreakNameIntoPieces (const char *full_dot_name);
+
+ static const char *
+ GetTypeString (lldb::SettableVariableType var_type);
+
+
+ static const char *
+ EnumToString (const lldb::OptionEnumValueElement *enum_values, int value);
+
+ static void
+ UpdateStringVariable (lldb::VarSetOperationType op,
+ std::string &string_var,
+ const char *new_value,
+ Error &err);
+
+
+ static void
+ UpdateBooleanVariable (lldb::VarSetOperationType op,
+ bool &bool_var,
+ const char *new_value,
+ Error &err);
+
+ static void
+ UpdateStringArrayVariable (lldb::VarSetOperationType op,
+ const char *index_value,
+ Args &array_var,
+ const char *new_value,
+ Error &err);
+
+ static void
+ UpdateDictionaryVariable (lldb::VarSetOperationType op,
+ const char *index_value,
+ std::map<std::string, std::string> &dictionary,
+ const char *new_value,
+ Error &err);
+
+ static void
+ UpdateEnumVariable (lldb::OptionEnumValueElement *enum_values,
+ int *enum_var,
+ const char *new_value,
+ Error &err);
+
+protected:
+
+ // -------------------------------------------------------------------------
+ // Protected methods are declared below here.
+ // -------------------------------------------------------------------------
+
+ bool
+ IsLiveInstance (const std::string &instance_name);
+
+ int
+ GlobalVariableMatches (const char *partial_name,
+ const std::string &complete_prefix,
+ StringList &matches);
+
+ int
+ InstanceVariableMatches (const char *partial_name,
+ const std::string &complete_prefix,
+ const char *instance_name,
+ StringList &matches);
+
+ int
+ LiveInstanceMatches (const char *partial_name,
+ const std::string &complete_prefix,
+ bool &word_complete,
+ StringList &matches);
+
+ int
+ ChildMatches (const char *partial_name,
+ const std::string &complete_prefix,
+ bool &word_complete,
+ StringList &matches);
+
+
+ size_t
+ GetNumChildren ();
+
+ const lldb::UserSettingsControllerSP
+ GetChildAtIndex (size_t index);
+
+
+ const SettingEntry *
+ GetGlobalEntry (const ConstString &var_name);
+
+ const SettingEntry *
+ GetInstanceEntry (const ConstString &var_name);
+
+ void
+ BuildParentPrefix (std::string &parent_prefix);
+
+
+ void
+ CopyDefaultSettings (const lldb::InstanceSettingsSP &new_settings,
+ const ConstString &instance_name,
+ bool pending);
+
+ lldb::InstanceSettingsSP
+ PendingSettingsForInstance (const ConstString &instance_name);
+
+ InstanceSettings *
+ FindSettingsForInstance (const ConstString &instance_name);
+
+ void
+ GetAllPendingSettingValues (StreamString &result_stream);
+
+ void
+ GetAllDefaultSettingValues (StreamString &result_stream);
+
+ void
+ GetAllInstanceVariableValues (CommandInterpreter &interpreter,
+ StreamString &result_stream);
+
+ void
+ OverrideAllInstances (const ConstString &var_name,
+ const char *value,
+ lldb::VarSetOperationType op,
+ const char *index_value,
+ Error &err);
+
+ UserSettingDefinition &
+ GetControllerSettings () { return m_settings; }
+
+ // -------------------------------------------------------------------------
+ // Static protected methods are declared below here.
+ // -------------------------------------------------------------------------
+
+ static void
+ PrintEnumValues (const lldb::OptionEnumValueElement *enum_values, Stream &str);
+
+
+ static int
+ BooleanMatches (const char *partial_value,
+ bool &word_complete,
+ StringList &matches);
+
+ static int
+ EnumMatches (const char *partial_value,
+ lldb::OptionEnumValueElement *enum_values,
+ bool &word_complete,
+ StringList &matches);
+
+ static void
+ VerifyOperationForType (lldb::SettableVariableType var_type,
+ lldb::VarSetOperationType op,
+ const ConstString &var_name,
+ Error &err);
+
+ // This is protected rather than private so that classes that inherit from UserSettingsController can access it.
+
+ lldb::InstanceSettingsSP m_default_settings;
+
+private:
+
+ UserSettingDefinition m_settings;
+
+ std::vector<lldb::UserSettingsControllerSP> m_children;
+ std::map <std::string, lldb::InstanceSettingsSP> m_pending_settings;
+ std::map <std::string, InstanceSettings *> m_live_settings; // live settings should never be NULL (hence 'live')
+
+ mutable Mutex m_children_mutex;
+ mutable Mutex m_pending_settings_mutex;
+ mutable Mutex m_live_settings_mutex;
+
+ DISALLOW_COPY_AND_ASSIGN (UserSettingsController);
+};
+
+class InstanceSettings
+{
+public:
+
+ InstanceSettings (UserSettingsController &owner, const char *instance_name);
+
+ InstanceSettings (const InstanceSettings &rhs);
+
+ virtual
+ ~InstanceSettings ();
+
+ InstanceSettings&
+ operator= (const InstanceSettings &rhs);
+
+ // Begin Pure Virtual Functions
+
+ virtual void
+ UpdateInstanceSettingsVariable (const ConstString &var_name,
+ const char *index_value,
+ const char *value,
+ const ConstString &instance_name,
+ const SettingEntry &entry,
+ lldb::VarSetOperationType op,
+ Error &err,
+ bool pending) = 0;
+
+ virtual void
+ GetInstanceSettingsValue (const SettingEntry &entry,
+ const ConstString &var_name,
+ StringList &value) = 0;
+
+ virtual void
+ CopyInstanceSettings (const lldb::InstanceSettingsSP &new_settings,
+ bool pending) = 0;
+
+ virtual const ConstString
+ CreateInstanceName () = 0;
+
+ // End Pure Virtual Functions
+
+ const ConstString &
+ GetInstanceName () { return m_instance_name; }
+
+ static const ConstString &
+ GetDefaultName ();
+
+protected:
+
+ UserSettingsController &m_owner;
+ const ConstString m_instance_name;
+};
+
+
+
+} // namespace lldb_private
+
+#endif // liblldb_UserSettingsController_h_
OpenPOWER on IntegriCloud