| //===-- 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; |
| } |