1 //===-- LibCxxAtomic.cpp ------------------------------------------*- C++
4 // The LLVM Compiler Infrastructure
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
9 //===----------------------------------------------------------------------===//
11 #include "LibCxxAtomic.h"
14 using namespace lldb_private;
15 using namespace lldb_private::formatters;
17 bool lldb_private::formatters::LibCxxAtomicSummaryProvider(
18 ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
19 static ConstString g___a_("__a_");
21 if (ValueObjectSP child = valobj.GetChildMemberWithName(g___a_, true)) {
23 if (child->GetSummaryAsCString(summary, options) && summary.size() > 0) {
24 stream.Printf("%s", summary.c_str());
32 namespace lldb_private {
33 namespace formatters {
34 class LibcxxStdAtomicSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
36 LibcxxStdAtomicSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);
38 ~LibcxxStdAtomicSyntheticFrontEnd() override = default;
40 size_t CalculateNumChildren() override;
42 lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
44 bool Update() override;
46 bool MightHaveChildren() override;
48 size_t GetIndexOfChildWithName(const ConstString &name) override;
50 lldb::ValueObjectSP GetSyntheticValue() override;
53 ValueObject *m_real_child;
55 } // namespace formatters
56 } // namespace lldb_private
58 lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::
59 LibcxxStdAtomicSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp)
60 : SyntheticChildrenFrontEnd(*valobj_sp), m_real_child(nullptr) {}
62 bool lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::Update() {
63 static ConstString g___a_("__a_");
65 m_real_child = m_backend.GetChildMemberWithName(g___a_, true).get();
70 bool lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::
75 size_t lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::
76 CalculateNumChildren() {
77 return m_real_child ? m_real_child->GetNumChildren() : 0;
81 lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetChildAtIndex(
83 return m_real_child ? m_real_child->GetChildAtIndex(idx, true) : nullptr;
86 size_t lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::
87 GetIndexOfChildWithName(const ConstString &name) {
88 return m_real_child ? m_real_child->GetIndexOfChildWithName(name)
92 lldb::ValueObjectSP lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::
94 if (m_real_child && m_real_child->CanProvideValue())
95 return m_real_child->GetSP();
99 SyntheticChildrenFrontEnd *
100 lldb_private::formatters::LibcxxAtomicSyntheticFrontEndCreator(
101 CXXSyntheticChildren *, lldb::ValueObjectSP valobj_sp) {
103 return new LibcxxStdAtomicSyntheticFrontEnd(valobj_sp);