1 //===-- SBValueList.h -------------------------------------------*- 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 #ifndef LLDB_SBValueList_h_
11 #define LLDB_SBValueList_h_
12 
13 #include "lldb/API/SBDefines.h"
14 
15 class ValueListImpl;
16 
17 namespace lldb {
18 
19 class LLDB_API SBValueList {
20 public:
21   SBValueList();
22 
23   SBValueList(const lldb::SBValueList &rhs);
24 
25   ~SBValueList();
26 
27   bool IsValid() const;
28 
29   void Clear();
30 
31   void Append(const lldb::SBValue &val_obj);
32 
33   void Append(const lldb::SBValueList &value_list);
34 
35   uint32_t GetSize() const;
36 
37   lldb::SBValue GetValueAtIndex(uint32_t idx) const;
38 
39   lldb::SBValue GetFirstValueByName(const char *name) const;
40 
41   lldb::SBValue FindValueObjectByUID(lldb::user_id_t uid);
42 
43   const lldb::SBValueList &operator=(const lldb::SBValueList &rhs);
44 
45 protected:
46   // only useful for visualizing the pointer or comparing two SBValueLists to
47   // see if they are backed by the same underlying Impl.
48   void *opaque_ptr();
49 
50 private:
51   friend class SBFrame;
52 
53   SBValueList(const ValueListImpl *lldb_object_ptr);
54 
55   void Append(lldb::ValueObjectSP &val_obj_sp);
56 
57   void CreateIfNeeded();
58 
59   ValueListImpl *operator->();
60 
61   ValueListImpl &operator*();
62 
63   const ValueListImpl *operator->() const;
64 
65   const ValueListImpl &operator*() const;
66 
67   ValueListImpl &ref();
68 
69   std::unique_ptr<ValueListImpl> m_opaque_ap;
70 };
71 
72 } // namespace lldb
73 
74 #endif // LLDB_SBValueList_h_
75