PythonDataObjects.h revision c66662664c44f34f891f39e4e416f766c7347f3c
1fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes//===-- PythonDataObjects.h----------------------------------------*- C++ -*-===//
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//                     The LLVM Compiler Infrastructure
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// This file is distributed under the University of Illinois Open Source
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// License. See LICENSE.TXT for details.
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes//
8fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes//===----------------------------------------------------------------------===//
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
10fc95c99cfa4921fef424f3f411d013b821589e69Elliott Hughes#ifndef liblldb_PythonDataObjects_h_
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#define liblldb_PythonDataObjects_h_
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// C Includes
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// C++ Includes
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// Other libraries and framework includes
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes// Project includes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "lldb/lldb-defines.h"
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "lldb/Core/ConstString.h"
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "lldb/Core/Flags.h"
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#include "lldb/Interpreter/OptionValue.h"
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesnamespace lldb_private {
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class PythonRefCountedObject
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    {
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public:
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonRefCountedObject (PyObject* obj) : m_object(obj)
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        {
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Py_XINCREF(m_object);
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ~PythonRefCountedObject ()
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        {
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Py_XDECREF(m_object);
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        void
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Reset (PyObject* object = NULL)
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        {
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Py_XDECREF(m_object);
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            m_object = object;
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Py_XINCREF(m_object);
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PyObject*
4784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        GetPyhonObject ()
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        {
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return m_object;
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        operator bool ()
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        {
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return m_object != NULL;
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
5784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller    private:
5884bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        PyObject* m_object;
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class PythonDataString
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public:
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataString (PyObject* object);
6684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        PythonDataString (const char* string);
6784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        ~PythonDataString ();
6884bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller
6984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        const char*
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetString();
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        void
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SetString (const char* string);
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        operator bool ()
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        {
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return m_object.operator bool();
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PyObject*
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetPythonObject() { return m_object.GetPyhonObject(); }
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private:
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonRefCountedObject m_object;
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class PythonDataInteger
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    {
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public:
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataInteger (PyObject* object);
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataInteger (int64_t value);
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ~PythonDataInteger ();
9384bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int64_t
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetInteger();
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        void
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SetInteger (int64_t value);
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
10084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        operator bool ()
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        {
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return m_object.operator bool();
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PyObject*
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetPythonObject() { return m_object.GetPyhonObject(); }
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private:
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonRefCountedObject m_object;
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class PythonDataArray
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    {
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public:
11484bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller
11584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        PythonDataArray (uint32_t count);
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataArray (PyObject* object);
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ~PythonDataArray ();
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uint32_t
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetSize();
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataObject*
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetItemAtIndex (uint32_t index);
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        void
12684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        SetItemAtIndex (uint32_t index, PythonDataObject* object);
12784bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        void
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        AppendItem (PythonDataObject* object);
13084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller
13184bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        operator bool ()
13284bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        {
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return m_object.operator bool();
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PyObject*
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetPythonObject() { return m_object.GetPyhonObject(); }
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private:
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonRefCountedObject m_object;
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class PythonDataDictionary
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    {
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public:
14584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller
14684bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        PythonDataDictionary ();
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataDictionary (PyObject* object);
14884bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        ~PythonDataDictionary ();
14984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        uint32_t GetSize();
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataObject*
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetItemForKey (PythonDataString* key);
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
15584bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        typedef bool (*DictionaryIteratorCallback)(PythonDataString* key, PythonDataDictionary* dict);
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataArray*
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetKeys ();
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
16084bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        PythonDataString*
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetKeyAtPosition (uint32_t pos);
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataObject*
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetValueAtPosition (uint32_t pos);
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        void
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        SetItemForKey (PythonDataString* key, PythonDataObject* value);
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        operator bool ()
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        {
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return m_object.operator bool();
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PyObject*
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetPythonObject() { return m_object.GetPyhonObject(); }
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private:
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonRefCountedObject m_object;
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    class PythonDataObject
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    {
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public:
18384bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataObject (PyObject* object);
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ~PythonDataObject ();
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataString*
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetStringObject ();
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataInteger*
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetIntegerObject ();
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataArray*
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetArrayObject();
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PythonDataDictionary*
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetDictionaryObject();
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        operator bool ()
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        {
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return m_object.operator bool();
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PyObject*
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        GetPythonObject() { return m_object.GetPyhonObject(); }
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private:
20984bf48564a8560403bd77eee23f7fad63e50340eNeil Fuller        PythonRefCountedObject m_object;
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes} // namespace lldb_private
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes#endif  // liblldb_PythonDataObjects_h_
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes