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