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