1314564Sdim//===-- SBTypeSummary.h -------------------------------------------*- C++
2314564Sdim//-*-===//
3254721Semaste//
4353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5353358Sdim// See https://llvm.org/LICENSE.txt for license information.
6353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#ifndef LLDB_SBTypeSummary_h_
11254721Semaste#define LLDB_SBTypeSummary_h_
12254721Semaste
13254721Semaste#include "lldb/API/SBDefines.h"
14254721Semaste
15254721Semastenamespace lldb {
16314564Sdimclass LLDB_API SBTypeSummaryOptions {
17314564Sdimpublic:
18314564Sdim  SBTypeSummaryOptions();
19280031Sdim
20314564Sdim  SBTypeSummaryOptions(const lldb::SBTypeSummaryOptions &rhs);
21296417Sdim
22314564Sdim  SBTypeSummaryOptions(const lldb_private::TypeSummaryOptions *lldb_object_ptr);
23296417Sdim
24314564Sdim  ~SBTypeSummaryOptions();
25254721Semaste
26353358Sdim  explicit operator bool() const;
27353358Sdim
28314564Sdim  bool IsValid();
29314564Sdim
30314564Sdim  lldb::LanguageType GetLanguage();
31314564Sdim
32314564Sdim  lldb::TypeSummaryCapping GetCapping();
33314564Sdim
34314564Sdim  void SetLanguage(lldb::LanguageType);
35314564Sdim
36314564Sdim  void SetCapping(lldb::TypeSummaryCapping);
37314564Sdim
38314564Sdimprotected:
39314564Sdim  friend class SBValue;
40314564Sdim
41314564Sdim  lldb_private::TypeSummaryOptions *operator->();
42314564Sdim
43314564Sdim  const lldb_private::TypeSummaryOptions *operator->() const;
44314564Sdim
45314564Sdim  lldb_private::TypeSummaryOptions *get();
46314564Sdim
47314564Sdim  lldb_private::TypeSummaryOptions &ref();
48314564Sdim
49314564Sdim  const lldb_private::TypeSummaryOptions &ref() const;
50314564Sdim
51314564Sdim  void SetOptions(const lldb_private::TypeSummaryOptions *lldb_object_ptr);
52314564Sdim
53314564Sdimprivate:
54353358Sdim  std::unique_ptr<lldb_private::TypeSummaryOptions> m_opaque_up;
55314564Sdim};
56314564Sdim
57314564Sdimclass SBTypeSummary {
58314564Sdimpublic:
59314564Sdim  SBTypeSummary();
60314564Sdim
61314564Sdim  // Native function summary formatter callback
62314564Sdim  typedef bool (*FormatCallback)(SBValue, SBTypeSummaryOptions, SBStream &);
63314564Sdim
64314564Sdim  static SBTypeSummary
65314564Sdim  CreateWithSummaryString(const char *data,
66314564Sdim                          uint32_t options = 0); // see lldb::eTypeOption values
67314564Sdim
68314564Sdim  static SBTypeSummary
69314564Sdim  CreateWithFunctionName(const char *data,
70314564Sdim                         uint32_t options = 0); // see lldb::eTypeOption values
71314564Sdim
72314564Sdim  static SBTypeSummary
73314564Sdim  CreateWithScriptCode(const char *data,
74314564Sdim                       uint32_t options = 0); // see lldb::eTypeOption values
75314564Sdim
76314564Sdim  static SBTypeSummary CreateWithCallback(FormatCallback cb,
77314564Sdim                                          uint32_t options = 0,
78314564Sdim                                          const char *description = nullptr);
79314564Sdim
80314564Sdim  SBTypeSummary(const lldb::SBTypeSummary &rhs);
81314564Sdim
82314564Sdim  ~SBTypeSummary();
83314564Sdim
84353358Sdim  explicit operator bool() const;
85353358Sdim
86314564Sdim  bool IsValid() const;
87314564Sdim
88314564Sdim  bool IsFunctionCode();
89314564Sdim
90314564Sdim  bool IsFunctionName();
91314564Sdim
92314564Sdim  bool IsSummaryString();
93314564Sdim
94314564Sdim  const char *GetData();
95314564Sdim
96314564Sdim  void SetSummaryString(const char *data);
97314564Sdim
98314564Sdim  void SetFunctionName(const char *data);
99314564Sdim
100314564Sdim  void SetFunctionCode(const char *data);
101314564Sdim
102314564Sdim  uint32_t GetOptions();
103314564Sdim
104314564Sdim  void SetOptions(uint32_t);
105314564Sdim
106314564Sdim  bool GetDescription(lldb::SBStream &description,
107314564Sdim                      lldb::DescriptionLevel description_level);
108314564Sdim
109314564Sdim  lldb::SBTypeSummary &operator=(const lldb::SBTypeSummary &rhs);
110314564Sdim
111314564Sdim  bool DoesPrintValue(lldb::SBValue value);
112314564Sdim
113314564Sdim  bool IsEqualTo(lldb::SBTypeSummary &rhs);
114314564Sdim
115314564Sdim  bool operator==(lldb::SBTypeSummary &rhs);
116314564Sdim
117314564Sdim  bool operator!=(lldb::SBTypeSummary &rhs);
118314564Sdim
119314564Sdimprotected:
120314564Sdim  friend class SBDebugger;
121314564Sdim  friend class SBTypeCategory;
122314564Sdim  friend class SBValue;
123314564Sdim
124314564Sdim  lldb::TypeSummaryImplSP GetSP();
125314564Sdim
126314564Sdim  void SetSP(const lldb::TypeSummaryImplSP &typefilter_impl_sp);
127314564Sdim
128314564Sdim  lldb::TypeSummaryImplSP m_opaque_sp;
129314564Sdim
130314564Sdim  SBTypeSummary(const lldb::TypeSummaryImplSP &);
131314564Sdim
132314564Sdim  bool CopyOnWrite_Impl();
133314564Sdim
134314564Sdim  bool ChangeSummaryType(bool want_script);
135314564Sdim};
136314564Sdim
137254721Semaste} // namespace lldb
138254721Semaste
139254721Semaste#endif // LLDB_SBTypeSummary_h_
140