1 //===-- LibCxxQueue.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 "LibCxx.h" 11 #include "lldb/DataFormatters/FormattersHelpers.h" 12 13 using namespace lldb; 14 using namespace lldb_private; 15 16 namespace { 17 18 class QueueFrontEnd : public SyntheticChildrenFrontEnd { 19 public: QueueFrontEnd(ValueObject & valobj)20 QueueFrontEnd(ValueObject &valobj) : SyntheticChildrenFrontEnd(valobj) { 21 Update(); 22 } 23 GetIndexOfChildWithName(const ConstString & name)24 size_t GetIndexOfChildWithName(const ConstString &name) override { 25 return m_container_sp ? m_container_sp->GetIndexOfChildWithName(name) 26 : UINT32_MAX; 27 } 28 MightHaveChildren()29 bool MightHaveChildren() override { return true; } 30 bool Update() override; 31 CalculateNumChildren()32 size_t CalculateNumChildren() override { 33 return m_container_sp ? m_container_sp->GetNumChildren() : 0; 34 } 35 GetChildAtIndex(size_t idx)36 ValueObjectSP GetChildAtIndex(size_t idx) override { 37 return m_container_sp ? m_container_sp->GetChildAtIndex(idx, true) 38 : nullptr; 39 } 40 41 private: 42 ValueObjectSP m_container_sp; 43 }; 44 } // namespace 45 Update()46bool QueueFrontEnd::Update() { 47 m_container_sp.reset(); 48 ValueObjectSP c_sp = m_backend.GetChildMemberWithName(ConstString("c"), true); 49 if (!c_sp) 50 return false; 51 m_container_sp = c_sp->GetSyntheticValue(); 52 return false; 53 } 54 55 SyntheticChildrenFrontEnd * LibcxxQueueFrontEndCreator(CXXSyntheticChildren *,lldb::ValueObjectSP valobj_sp)56formatters::LibcxxQueueFrontEndCreator(CXXSyntheticChildren *, 57 lldb::ValueObjectSP valobj_sp) { 58 if (valobj_sp) 59 return new QueueFrontEnd(*valobj_sp); 60 return nullptr; 61 } 62