173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===-- Property.h ----------------------------------------------*- C++ -*-===// 273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// 373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// The LLVM Compiler Infrastructure 473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// 573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// This file is distributed under the University of Illinois Open Source 673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// License. See LICENSE.TXT for details. 773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// 873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton//===----------------------------------------------------------------------===// 973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 1073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#ifndef liblldb_Property_h_ 1173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#define liblldb_Property_h_ 1273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 1373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C Includes 1473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// C++ Includes 1573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include <string> 1673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 1773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Other libraries and framework includes 1873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton// Project includes 1973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/lldb-defines.h" 2073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Core/ConstString.h" 2173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Core/Flags.h" 2273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#include "lldb/Interpreter/OptionValue.h" 2373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 2473844aa19a7360b662e2be710fc3c969d6c86606Greg Claytonnamespace lldb_private { 2573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 2673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton // A structure that can be used to create a global table for all properties. 2773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton // Property class instances can be constructed using one of these. 2873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton struct PropertyDefinition 2973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 3073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton const char *name; 3173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton OptionValue::Type type; 3273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton bool global; 3373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton uintptr_t default_uint_value; 3473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton const char *default_cstr_value; 3573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton OptionEnumValueElement *enum_values; 3673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton const char *description; 3773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton }; 3873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 3973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton class Property 4073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 4173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton public: 4273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton Property (const PropertyDefinition &definition); 4373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 4473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton Property (const ConstString &name, 4573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton const ConstString &desc, 4673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton bool is_global, 4773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton const lldb::OptionValueSP &value_sp); 4873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 4973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton const ConstString & 5073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton GetName() const 5173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 5273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton return m_name; 5373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 5473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 5573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton const char * 5673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton GetDescription () const 5773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 5873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton return m_description.GetCString(); 5973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 6073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 6173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton const lldb::OptionValueSP & 6273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton GetValue() const 6373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 6473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton return m_value_sp; 6573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 6673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 6773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton void 6873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton SetOptionValue (const lldb::OptionValueSP &value_sp) 6973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 7073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton m_value_sp = value_sp; 7173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 7273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 7373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 7473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton bool 7573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton IsValid() const 7673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 7773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton return (bool)m_value_sp; 7873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 7973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 8073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton bool 8173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton IsGlobal () const 8273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton { 8373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton return m_is_global; 8473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton } 8573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 8673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton void 8773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton Dump (const ExecutionContext *exe_ctx, 8873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton Stream &strm, 8973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton uint32_t dump_mask) const; 9073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 9173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton bool 9273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton DumpQualifiedName(Stream &strm) const; 9373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 9473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton void 9573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton DumpDescription (CommandInterpreter &interpreter, 9673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton Stream &strm, 9773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton uint32_t output_width, 9873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton bool display_qualified_name) const; 9973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 10073844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton protected: 10173844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton ConstString m_name; 10273844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton ConstString m_description; 10373844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton lldb::OptionValueSP m_value_sp; 10473844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton bool m_is_global; 10573844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton }; 10673844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 10773844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton} // namespace lldb_private 10873844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton 10973844aa19a7360b662e2be710fc3c969d6c86606Greg Clayton#endif // liblldb_Property_h_ 110