blob: 5e4417484f061ea78efd36907cecbc07b037425c [file] [log] [blame]
Todd Fiala75930012016-08-19 04:21:48 +00001//===-- SBStructuredData.cpp ------------------------------------*- 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#include "lldb/API/SBStructuredData.h"
11
12#include "lldb/API/SBStream.h"
13#include "lldb/Core/Error.h"
14#include "lldb/Core/Event.h"
15#include "lldb/Core/Stream.h"
16#include "lldb/Core/StructuredData.h"
17#include "lldb/Target/StructuredDataPlugin.h"
18
19using namespace lldb;
20using namespace lldb_private;
21
22#pragma mark --
23#pragma mark Impl
24
25class SBStructuredData::Impl
26{
27public:
28
29 Impl() :
30 m_plugin_wp(),
31 m_data_sp()
32 {
33 }
34
35 Impl(const Impl &rhs) = default;
36
37 Impl(const EventSP &event_sp) :
38 m_plugin_wp(EventDataStructuredData::GetPluginFromEvent(event_sp.get())),
39 m_data_sp(EventDataStructuredData::GetObjectFromEvent(event_sp.get()))
40 {
41 }
42
43 ~Impl() = default;
44
45 Impl&
46 operator =(const Impl &rhs) = default;
47
48 bool
49 IsValid() const
50 {
51 return m_data_sp.get() != nullptr;
52 }
53
54 void
55 Clear()
56 {
57 m_plugin_wp.reset();
58 m_data_sp.reset();
59 }
60
61 SBError
62 GetAsJSON(lldb::SBStream &stream) const
63 {
64 SBError sb_error;
65
66 if (!m_data_sp)
67 {
68 sb_error.SetErrorString("No structured data.");
69 return sb_error;
70 }
71
72 m_data_sp->Dump(stream.ref());
73 return sb_error;
74 }
75
76 lldb::SBError
77 GetDescription(lldb::SBStream &stream) const
78 {
79 SBError sb_error;
80
81 if (!m_data_sp)
82 {
83 sb_error.SetErrorString("Cannot pretty print structured data: "
84 "no data to print.");
85 return sb_error;
86 }
87
88 // Grab the plugin.
89 auto plugin_sp = StructuredDataPluginSP(m_plugin_wp);
90 if (!plugin_sp)
91 {
92 sb_error.SetErrorString("Cannot pretty print structured data: "
93 "plugin doesn't exist.");
94 return sb_error;
95 }
96
97 // Get the data's description.
98 auto error = plugin_sp->GetDescription(m_data_sp, stream.ref());
99 if (!error.Success())
100 sb_error.SetError(error);
101
102 return sb_error;
103 }
104
105private:
106
107 StructuredDataPluginWP m_plugin_wp;
108 StructuredData::ObjectSP m_data_sp;
109
110};
111
112#pragma mark --
113#pragma mark SBStructuredData
114
115
116SBStructuredData::SBStructuredData() :
117 m_impl_up(new Impl())
118{
119}
120
121SBStructuredData::SBStructuredData(const lldb::SBStructuredData &rhs) :
122 m_impl_up(new Impl(*rhs.m_impl_up.get()))
123{
124}
125
126SBStructuredData::SBStructuredData(const lldb::EventSP &event_sp) :
127 m_impl_up(new Impl(event_sp))
128{
129}
130
131SBStructuredData::~SBStructuredData()
132{
133}
134
135SBStructuredData &
136SBStructuredData::operator =(const lldb::SBStructuredData &rhs)
137{
138 *m_impl_up = *rhs.m_impl_up;
139 return *this;
140}
141
142bool
143SBStructuredData::IsValid() const
144{
145 return m_impl_up->IsValid();
146}
147
148void
149SBStructuredData::Clear()
150{
151 m_impl_up->Clear();
152}
153
154SBError
155SBStructuredData::GetAsJSON(lldb::SBStream &stream) const
156{
157 return m_impl_up->GetAsJSON(stream);
158}
159
160lldb::SBError
161SBStructuredData::GetDescription(lldb::SBStream &stream) const
162{
163 return m_impl_up->GetDescription(stream);
164}
165