//====-- 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_ #include "lldb/Utility/Error.h" // for Error #include "lldb/lldb-forward.h" // for OptionValuePropertiesSP #include "lldb/lldb-private-enumerations.h" // for VarSetOperationType #include "llvm/ADT/StringRef.h" // for StringRef #include #include // for size_t #include // for uint32_t namespace lldb_private { class CommandInterpreter; } namespace lldb_private { class ConstString; } namespace lldb_private { class ExecutionContext; } namespace lldb_private { class Property; } namespace lldb_private { class Stream; } namespace lldb_private { class Properties { public: Properties() : m_collection_sp() {} Properties(const lldb::OptionValuePropertiesSP &collection_sp) : m_collection_sp(collection_sp) {} virtual ~Properties() {} virtual lldb::OptionValuePropertiesSP GetValueProperties() const { // This function is virtual in case subclasses want to lazily // implement creating the properties. return m_collection_sp; } virtual lldb::OptionValueSP GetPropertyValue(const ExecutionContext *exe_ctx, llvm::StringRef property_path, bool will_modify, Error &error) const; virtual Error SetPropertyValue(const ExecutionContext *exe_ctx, VarSetOperationType op, llvm::StringRef property_path, llvm::StringRef value); virtual Error DumpPropertyValue(const ExecutionContext *exe_ctx, Stream &strm, llvm::StringRef property_path, uint32_t dump_mask); virtual void DumpAllPropertyValues(const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask); virtual void DumpAllDescriptions(CommandInterpreter &interpreter, Stream &strm) const; size_t Apropos(llvm::StringRef keyword, std::vector &matching_properties) const; lldb::OptionValuePropertiesSP GetSubProperty(const ExecutionContext *exe_ctx, const ConstString &name); // We sometimes need to introduce a setting to enable experimental features, // but then we don't want the setting for these to cause errors when the // setting // goes away. Add a sub-topic of the settings using this experimental name, // and // two things will happen. One is that settings that don't find the name will // not // be treated as errors. Also, if you decide to keep the settings just move // them into // the containing properties, and we will auto-forward the experimental // settings to the // real one. static const char *GetExperimentalSettingsName(); static bool IsSettingExperimental(llvm::StringRef setting); protected: lldb::OptionValuePropertiesSP m_collection_sp; }; } // namespace lldb_private #endif // liblldb_UserSettingsController_h_