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