| //===-- LibCxxAtomic.cpp ------------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "LibCxxAtomic.h" |
| |
| using namespace lldb; |
| using namespace lldb_private; |
| using namespace lldb_private::formatters; |
| |
| bool |
| lldb_private::formatters::LibCxxAtomicSummaryProvider (ValueObject& valobj, Stream& stream, const TypeSummaryOptions& options) |
| { |
| static ConstString g___a_("__a_"); |
| |
| if (ValueObjectSP child = valobj.GetChildMemberWithName(g___a_, true)) |
| { |
| std::string summary; |
| if (child->GetSummaryAsCString(summary, options) && summary.size() > 0) |
| { |
| stream.Printf("%s", summary.c_str()); |
| return true; |
| } |
| } |
| |
| return false; |
| } |
| |
| namespace lldb_private { |
| namespace formatters { |
| class LibcxxStdAtomicSyntheticFrontEnd : public SyntheticChildrenFrontEnd |
| { |
| public: |
| LibcxxStdAtomicSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); |
| |
| ~LibcxxStdAtomicSyntheticFrontEnd() override = default; |
| |
| size_t |
| CalculateNumChildren() override; |
| |
| lldb::ValueObjectSP |
| GetChildAtIndex(size_t idx) override; |
| |
| bool |
| Update() override; |
| |
| bool |
| MightHaveChildren() override; |
| |
| size_t |
| GetIndexOfChildWithName(const ConstString &name) override; |
| |
| lldb::ValueObjectSP |
| GetSyntheticValue () override; |
| private: |
| ValueObject *m_real_child; |
| }; |
| } // namespace formatters |
| } // namespace lldb_private |
| |
| lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::LibcxxStdAtomicSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : |
| SyntheticChildrenFrontEnd(*valobj_sp), |
| m_real_child(nullptr) |
| { |
| } |
| |
| bool |
| lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::Update() |
| { |
| static ConstString g___a_("__a_"); |
| |
| m_real_child = m_backend.GetChildMemberWithName(g___a_, true).get(); |
| |
| return false; |
| } |
| |
| bool |
| lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::MightHaveChildren() |
| { |
| return true; |
| } |
| |
| size_t |
| lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::CalculateNumChildren() |
| { |
| return m_real_child ? m_real_child->GetNumChildren() : 0; |
| } |
| |
| lldb::ValueObjectSP |
| lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetChildAtIndex(size_t idx) |
| { |
| return m_real_child ? m_real_child->GetChildAtIndex(idx, true) : nullptr; |
| } |
| |
| size_t |
| lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetIndexOfChildWithName(const ConstString &name) |
| { |
| return m_real_child ? m_real_child->GetIndexOfChildWithName(name) : UINT32_MAX; |
| } |
| |
| lldb::ValueObjectSP |
| lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetSyntheticValue () |
| { |
| if (m_real_child && m_real_child->CanProvideValue()) |
| return m_real_child->GetSP(); |
| return nullptr; |
| } |
| |
| SyntheticChildrenFrontEnd* |
| lldb_private::formatters::LibcxxAtomicSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp) |
| { |
| if (valobj_sp) |
| return new LibcxxStdAtomicSyntheticFrontEnd(valobj_sp); |
| return nullptr; |
| } |
| |