]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/source/API/SBTypeFormat.cpp
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / source / API / SBTypeFormat.cpp
1 //===-- SBTypeFormat.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/lldb-python.h"
11
12 #include "lldb/API/SBTypeFormat.h"
13
14 #include "lldb/API/SBStream.h"
15
16 #include "lldb/DataFormatters/DataVisualization.h"
17
18 using namespace lldb;
19 using namespace lldb_private;
20
21 SBTypeFormat::SBTypeFormat() :
22 m_opaque_sp()
23 {
24 }
25
26 SBTypeFormat::SBTypeFormat (lldb::Format format,
27                             uint32_t options)
28 : m_opaque_sp(TypeFormatImplSP(new TypeFormatImpl(format,options)))
29 {
30 }
31
32 SBTypeFormat::SBTypeFormat (const lldb::SBTypeFormat &rhs) :
33 m_opaque_sp(rhs.m_opaque_sp)
34 {
35 }
36
37 SBTypeFormat::~SBTypeFormat ()
38 {
39 }
40
41 bool
42 SBTypeFormat::IsValid() const
43 {
44     return m_opaque_sp.get() != NULL;
45 }
46
47 lldb::Format
48 SBTypeFormat::GetFormat ()
49 {
50     if (IsValid())
51         return m_opaque_sp->GetFormat();
52     return lldb::eFormatInvalid;
53 }
54
55 uint32_t
56 SBTypeFormat::GetOptions()
57 {
58     if (IsValid())
59         return m_opaque_sp->GetOptions();
60     return 0;
61 }
62
63 void
64 SBTypeFormat::SetFormat (lldb::Format fmt)
65 {
66     if (CopyOnWrite_Impl())
67         m_opaque_sp->SetFormat(fmt);
68 }
69
70 void
71 SBTypeFormat::SetOptions (uint32_t value)
72 {
73     if (CopyOnWrite_Impl())
74         m_opaque_sp->SetOptions(value);
75 }
76
77 bool
78 SBTypeFormat::GetDescription (lldb::SBStream &description, 
79                               lldb::DescriptionLevel description_level)
80 {
81     if (!IsValid())
82         return false;
83     else {
84         description.Printf("%s\n",
85                            m_opaque_sp->GetDescription().c_str());
86         return true;
87     }
88 }
89
90 lldb::SBTypeFormat &
91 SBTypeFormat::operator = (const lldb::SBTypeFormat &rhs)
92 {
93     if (this != &rhs)
94     {
95         m_opaque_sp = rhs.m_opaque_sp;
96     }
97     return *this;
98 }
99
100 bool
101 SBTypeFormat::operator == (lldb::SBTypeFormat &rhs)
102 {
103     if (IsValid() == false)
104         return !rhs.IsValid();
105     return m_opaque_sp == rhs.m_opaque_sp;
106 }
107
108 bool
109 SBTypeFormat::IsEqualTo (lldb::SBTypeFormat &rhs)
110 {
111     if (IsValid() == false)
112         return !rhs.IsValid();
113     
114     if (GetFormat() == rhs.GetFormat())
115         return GetOptions() == rhs.GetOptions();
116     else
117         return false;
118 }
119
120 bool
121 SBTypeFormat::operator != (lldb::SBTypeFormat &rhs)
122 {
123     if (IsValid() == false)
124         return !rhs.IsValid();
125     return m_opaque_sp != rhs.m_opaque_sp;
126 }
127
128 lldb::TypeFormatImplSP
129 SBTypeFormat::GetSP ()
130 {
131     return m_opaque_sp;
132 }
133
134 void
135 SBTypeFormat::SetSP (const lldb::TypeFormatImplSP &typeformat_impl_sp)
136 {
137     m_opaque_sp = typeformat_impl_sp;
138 }
139
140 SBTypeFormat::SBTypeFormat (const lldb::TypeFormatImplSP &typeformat_impl_sp) :
141     m_opaque_sp(typeformat_impl_sp)
142 {
143 }
144
145 bool
146 SBTypeFormat::CopyOnWrite_Impl()
147 {
148     if (!IsValid())
149         return false;
150     if (m_opaque_sp.unique())
151         return true;
152
153     SetSP(TypeFormatImplSP(new TypeFormatImpl(GetFormat(),GetOptions())));
154     return true;
155 }