Home | History | Annotate | Download | only in API
      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 }
    156