LibCxxAtomic.cpp revision 314564
1//===-- LibCxxAtomic.cpp ------------------------------------------*- C++ 2//-*-===// 3// 4// The LLVM Compiler Infrastructure 5// 6// This file is distributed under the University of Illinois Open Source 7// License. See LICENSE.TXT for details. 8// 9//===----------------------------------------------------------------------===// 10 11#include "LibCxxAtomic.h" 12 13using namespace lldb; 14using namespace lldb_private; 15using namespace lldb_private::formatters; 16 17bool lldb_private::formatters::LibCxxAtomicSummaryProvider( 18 ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) { 19 static ConstString g___a_("__a_"); 20 21 if (ValueObjectSP child = valobj.GetChildMemberWithName(g___a_, true)) { 22 std::string summary; 23 if (child->GetSummaryAsCString(summary, options) && summary.size() > 0) { 24 stream.Printf("%s", summary.c_str()); 25 return true; 26 } 27 } 28 29 return false; 30} 31 32namespace lldb_private { 33namespace formatters { 34class LibcxxStdAtomicSyntheticFrontEnd : public SyntheticChildrenFrontEnd { 35public: 36 LibcxxStdAtomicSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp); 37 38 ~LibcxxStdAtomicSyntheticFrontEnd() override = default; 39 40 size_t CalculateNumChildren() override; 41 42 lldb::ValueObjectSP GetChildAtIndex(size_t idx) override; 43 44 bool Update() override; 45 46 bool MightHaveChildren() override; 47 48 size_t GetIndexOfChildWithName(const ConstString &name) override; 49 50 lldb::ValueObjectSP GetSyntheticValue() override; 51 52private: 53 ValueObject *m_real_child; 54}; 55} // namespace formatters 56} // namespace lldb_private 57 58lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd:: 59 LibcxxStdAtomicSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp) 60 : SyntheticChildrenFrontEnd(*valobj_sp), m_real_child(nullptr) {} 61 62bool lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::Update() { 63 static ConstString g___a_("__a_"); 64 65 m_real_child = m_backend.GetChildMemberWithName(g___a_, true).get(); 66 67 return false; 68} 69 70bool lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd:: 71 MightHaveChildren() { 72 return true; 73} 74 75size_t lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd:: 76 CalculateNumChildren() { 77 return m_real_child ? m_real_child->GetNumChildren() : 0; 78} 79 80lldb::ValueObjectSP 81lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetChildAtIndex( 82 size_t idx) { 83 return m_real_child ? m_real_child->GetChildAtIndex(idx, true) : nullptr; 84} 85 86size_t lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd:: 87 GetIndexOfChildWithName(const ConstString &name) { 88 return m_real_child ? m_real_child->GetIndexOfChildWithName(name) 89 : UINT32_MAX; 90} 91 92lldb::ValueObjectSP lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd:: 93 GetSyntheticValue() { 94 if (m_real_child && m_real_child->CanProvideValue()) 95 return m_real_child->GetSP(); 96 return nullptr; 97} 98 99SyntheticChildrenFrontEnd * 100lldb_private::formatters::LibcxxAtomicSyntheticFrontEndCreator( 101 CXXSyntheticChildren *, lldb::ValueObjectSP valobj_sp) { 102 if (valobj_sp) 103 return new LibcxxStdAtomicSyntheticFrontEnd(valobj_sp); 104 return nullptr; 105} 106