PythonDataObjects.cpp revision b2e953d1d753bc725ea78f573c150493b99e2205
1c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata//===-- PythonDataObjects.cpp ------------------------------------*- C++ -*-===// 2c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// 3c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// The LLVM Compiler Infrastructure 4c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// 5c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// This file is distributed under the University of Illinois Open Source 6c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// License. See LICENSE.TXT for details. 7c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// 8c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata//===----------------------------------------------------------------------===// 9c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 10c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// In order to guarantee correct working with Python, Python.h *MUST* be 11c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// the *FIRST* header file included here. 12c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#ifdef LLDB_DISABLE_PYTHON 13c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 14c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata// Python is disabled in this build 15c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 16c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#else 17c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 18c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#if defined (__APPLE__) 19c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#include <Python/Python.h> 20c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#else 21c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#include <Python.h> 22c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#endif 23c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 24b2e953d1d753bc725ea78f573c150493b99e2205Filipe Cabecinhas#include "lldb/Interpreter/PythonDataObjects.h" 25c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 26c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatausing namespace lldb_private; 27c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatausing namespace lldb; 28c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 2912477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataObject::PythonDataObject (PyObject* object) : 3012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(object) 31c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 32c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 33c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 3412477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataObject::PythonDataObject () : 3512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object() 3612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 3712477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 3812477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 3912477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataObject::~PythonDataObject () 4012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 4112477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 4212477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 4312477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataString 44c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject::GetStringObject () 45c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 4612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataString(GetPythonObject()); 47c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 48c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 4912477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataInteger 50c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject::GetIntegerObject () 51c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 5212477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataInteger(GetPythonObject()); 53c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 54c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 5512477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataArray 56c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject::GetArrayObject() 57c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 5812477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataArray(GetPythonObject()); 59c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 60c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 6112477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataDictionary 62c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataObject::GetDictionaryObject() 63c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 6412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataDictionary(GetPythonObject()); 6512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 6612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 6712477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataInteger::PythonDataInteger (bool create_empty) : 6812477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(create_empty ? PyInt_FromLong(0) : NULL) 6912477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 70c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 71c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 7212477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataInteger::PythonDataInteger (PyObject* object) : 7312477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(object) 74c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 7512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (object && !PyInt_Check(GetPythonObject())) 76c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset(); 77c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 78c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 7912477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataInteger::PythonDataInteger (int64_t value) : 8012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(PyInt_FromLong(value)) 81c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 82c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 83c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 8412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 8512477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataInteger::~PythonDataInteger () 86c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 87c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 88c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 89c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granataint64_t 90c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataInteger::GetInteger() 91c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 92c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 93c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return PyInt_AsLong(GetPythonObject()); 94c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata else 95c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return UINT64_MAX; 96c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 97c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 98c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 99c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataInteger::SetInteger (int64_t value) 100c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 101c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset(PyInt_FromLong(value)); 102c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 103c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 10412477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataString::PythonDataString (bool create_empty) : 10512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(create_empty ? PyString_FromString("") : NULL) 10612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 10712477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 10812477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 10912477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataString::PythonDataString (PyObject* object) : 11012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(object) 111c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 11212477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (object && !PyString_Check(GetPythonObject())) 11312477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object.Reset(); 11412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 115c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 11612477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataString::PythonDataString (const char* string) : 11712477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(PyString_FromString(string)) 118c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 119c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 120c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 121c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataString::~PythonDataString () 122c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 123c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 124c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 125c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granataconst char* 126b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg ClaytonPythonDataString::GetString() const 127c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 128c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 129c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return PyString_AsString(GetPythonObject()); 130c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 131c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 132c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 133b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg Claytonsize_t 134b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg ClaytonPythonDataString::GetSize() const 135b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg Clayton{ 136b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg Clayton if (m_object) 137b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg Clayton return PyString_Size(GetPythonObject()); 138b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg Clayton return 0; 139b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg Clayton} 140b8f126a807c00e5c2d0e7faaf764c38072cd6764Greg Clayton 141c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 142c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataString::SetString (const char* string) 143c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 144c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset(PyString_FromString(string)); 145c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 146c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 14712477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataArray::PythonDataArray (bool create_empty) : 14812477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(create_empty ? PyList_New(0) : NULL) 149c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 150c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 151c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 15212477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataArray::PythonDataArray (uint32_t count) : 15312477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(PyList_New(count)) 154c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 15512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 15612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 15712477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataArray::PythonDataArray (PyObject* object) : 15812477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(object) 15912477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 16012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (object && !PyList_Check(GetPythonObject())) 161c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset(); 162c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 163c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 164c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray::~PythonDataArray () 165c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 166c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 167c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 168c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatauint32_t 169c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray::GetSize() 170c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 171c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 172c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return PyList_GET_SIZE(GetPythonObject()); 173c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return 0; 174c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 175c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 17612477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataObject 177c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataArray::GetItemAtIndex (uint32_t index) 178c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 179c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 18012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataObject(PyList_GetItem(GetPythonObject(), index)); 181c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 182c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 183c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 184c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 18512477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataArray::SetItemAtIndex (uint32_t index, const PythonDataObject & object) 186c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 18712477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (m_object && object) 18812477554ee676b775ec419575e1b091fa95bdc80Greg Clayton PyList_SetItem(GetPythonObject(), index, object.GetPythonObject()); 189c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 190c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 191c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 19212477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataArray::AppendItem (const PythonDataObject &object) 193c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 19412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (m_object && object) 19512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton PyList_Append(GetPythonObject(), object.GetPythonObject()); 196c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 197c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 19812477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataDictionary::PythonDataDictionary (bool create_empty) : 19912477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(create_empty ? PyDict_New() : NULL) 200c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 201c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 202c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 20312477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataDictionary::PythonDataDictionary (PyObject* object) : 20412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton m_object(object) 205c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 20612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (object && !PyDict_Check(GetPythonObject())) 207c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata m_object.Reset(); 208c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 209c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 210c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::~PythonDataDictionary () 211c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 212c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 213c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 214c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatauint32_t 215c66662664c44f34f891f39e4e416f766c7347f3cEnrico GranataPythonDataDictionary::GetSize() 216c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 217c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 218c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return PyDict_Size(GetPythonObject()); 219c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return 0; 220c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 221c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 22212477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataObject 22388b980bfd735c4691b7f0771a45a78cb75033564Greg ClaytonPythonDataDictionary::GetItemForKey (const char *key) const 224c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 22512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (key && key[0]) 22612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton { 22712477554ee676b775ec419575e1b091fa95bdc80Greg Clayton PythonDataString python_key(key); 22812477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return GetItemForKey(python_key); 22912477554ee676b775ec419575e1b091fa95bdc80Greg Clayton } 230c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 231c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 232c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 23312477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 23412477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataObject 23588b980bfd735c4691b7f0771a45a78cb75033564Greg ClaytonPythonDataDictionary::GetItemForKey (const PythonDataString &key) const 23612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton{ 23712477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (m_object && key) 23812477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataObject(PyDict_GetItem(GetPythonObject(), key.GetPythonObject())); 23912477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataObject(); 24012477554ee676b775ec419575e1b091fa95bdc80Greg Clayton} 24112477554ee676b775ec419575e1b091fa95bdc80Greg Clayton 24288b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton 24388b980bfd735c4691b7f0771a45a78cb75033564Greg Claytonconst char * 24488b980bfd735c4691b7f0771a45a78cb75033564Greg ClaytonPythonDataDictionary::GetItemForKeyAsString (const PythonDataString &key, const char *fail_value) const 24588b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton{ 24688b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton if (m_object && key) 24788b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton { 24888b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton PyObject *object = PyDict_GetItem(GetPythonObject(), key.GetPythonObject()); 24988b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton if (object && PyString_Check(object)) 25088b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton return PyString_AsString(object); 25188b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton } 25288b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton return fail_value; 25388b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton} 25488b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton 25588b980bfd735c4691b7f0771a45a78cb75033564Greg Claytonint64_t 25688b980bfd735c4691b7f0771a45a78cb75033564Greg ClaytonPythonDataDictionary::GetItemForKeyAsInteger (const PythonDataString &key, int64_t fail_value) const 25788b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton{ 25888b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton if (m_object && key) 25988b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton { 26088b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton PyObject *object = PyDict_GetItem(GetPythonObject(), key.GetPythonObject()); 26188b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton if (object && PyInt_Check(object)) 26288b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton return PyInt_AsLong(object); 26388b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton } 26488b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton return fail_value; 26588b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton} 26688b980bfd735c4691b7f0771a45a78cb75033564Greg Clayton 26712477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataArray 26888b980bfd735c4691b7f0771a45a78cb75033564Greg ClaytonPythonDataDictionary::GetKeys () const 269c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 270c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (m_object) 27112477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataArray(PyDict_Keys(GetPythonObject())); 27212477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataArray(); 273c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 274c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 27512477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataString 27688b980bfd735c4691b7f0771a45a78cb75033564Greg ClaytonPythonDataDictionary::GetKeyAtPosition (uint32_t pos) const 277c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 278c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata PyObject *key, *value; 279c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata Py_ssize_t pos_iter = 0; 280c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 28112477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (m_object) 28212477554ee676b775ec419575e1b091fa95bdc80Greg Clayton { 28312477554ee676b775ec419575e1b091fa95bdc80Greg Clayton while (PyDict_Next(GetPythonObject(), &pos_iter, &key, &value)) 28412477554ee676b775ec419575e1b091fa95bdc80Greg Clayton { 28512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (pos-- == 0) 28612477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataString(key); 28712477554ee676b775ec419575e1b091fa95bdc80Greg Clayton } 288c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata } 28912477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataString(); 290c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 291c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 29212477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataObject 29388b980bfd735c4691b7f0771a45a78cb75033564Greg ClaytonPythonDataDictionary::GetValueAtPosition (uint32_t pos) const 294c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 295c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata PyObject *key, *value; 296c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata Py_ssize_t pos_iter = 0; 297c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 298c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (!m_object) 299c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata return NULL; 300c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 301c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata while (PyDict_Next(GetPythonObject(), &pos_iter, &key, &value)) { 302c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata if (pos-- == 0) 30312477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataObject(value); 304c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata } 30512477554ee676b775ec419575e1b091fa95bdc80Greg Clayton return PythonDataObject(); 306c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 307c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 308c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granatavoid 30912477554ee676b775ec419575e1b091fa95bdc80Greg ClaytonPythonDataDictionary::SetItemForKey (const PythonDataString &key, const PythonDataObject &value) 310c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata{ 31112477554ee676b775ec419575e1b091fa95bdc80Greg Clayton if (m_object && key && value) 31212477554ee676b775ec419575e1b091fa95bdc80Greg Clayton PyDict_SetItem(GetPythonObject(), key.GetPythonObject(), value.GetPythonObject()); 313c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata} 314c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata 315c66662664c44f34f891f39e4e416f766c7347f3cEnrico Granata#endif 316