]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/Language/CPlusPlus/LibCxxQueue.cpp
MFV: r336486
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / Language / CPlusPlus / LibCxxQueue.cpp
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:
20   QueueFrontEnd(ValueObject &valobj) : SyntheticChildrenFrontEnd(valobj) {
21     Update();
22   }
23
24   size_t GetIndexOfChildWithName(const ConstString &name) override {
25     return m_container_sp ? m_container_sp->GetIndexOfChildWithName(name)
26                           : UINT32_MAX;
27   }
28
29   bool MightHaveChildren() override { return true; }
30   bool Update() override;
31
32   size_t CalculateNumChildren() override {
33     return m_container_sp ? m_container_sp->GetNumChildren() : 0;
34   }
35
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
46 bool 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 *
56 formatters::LibcxxQueueFrontEndCreator(CXXSyntheticChildren *,
57                                        lldb::ValueObjectSP valobj_sp) {
58   if (valobj_sp)
59     return new QueueFrontEnd(*valobj_sp);
60   return nullptr;
61 }