mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
remove PyCObject
This commit is contained in:
parent
286a0d2ff7
commit
f1664ae13a
6 changed files with 2 additions and 292 deletions
|
@ -1,59 +0,0 @@
|
|||
.. highlightlang:: c
|
||||
|
||||
.. _cobjects:
|
||||
|
||||
CObjects
|
||||
--------
|
||||
|
||||
.. index:: object: CObject
|
||||
|
||||
|
||||
.. warning::
|
||||
|
||||
The CObject API is deprecated as of Python 3.1. Please switch to the new
|
||||
:ref:`capsules` API.
|
||||
|
||||
.. ctype:: PyCObject
|
||||
|
||||
This subtype of :ctype:`PyObject` represents an opaque value, useful for C
|
||||
extension modules who need to pass an opaque value (as a :ctype:`void\*`
|
||||
pointer) through Python code to other C code. It is often used to make a C
|
||||
function pointer defined in one module available to other modules, so the
|
||||
regular import mechanism can be used to access C APIs defined in dynamically
|
||||
loaded modules.
|
||||
|
||||
|
||||
.. cfunction:: int PyCObject_Check(PyObject *p)
|
||||
|
||||
Return true if its argument is a :ctype:`PyCObject`.
|
||||
|
||||
|
||||
.. cfunction:: PyObject* PyCObject_FromVoidPtr(void* cobj, void (*destr)(void *))
|
||||
|
||||
Create a :ctype:`PyCObject` from the ``void *`` *cobj*. The *destr* function
|
||||
will be called when the object is reclaimed, unless it is *NULL*.
|
||||
|
||||
|
||||
.. cfunction:: PyObject* PyCObject_FromVoidPtrAndDesc(void* cobj, void* desc, void (*destr)(void *, void *))
|
||||
|
||||
Create a :ctype:`PyCObject` from the :ctype:`void \*` *cobj*. The *destr*
|
||||
function will be called when the object is reclaimed. The *desc* argument can
|
||||
be used to pass extra callback data for the destructor function.
|
||||
|
||||
|
||||
.. cfunction:: void* PyCObject_AsVoidPtr(PyObject* self)
|
||||
|
||||
Return the object :ctype:`void \*` that the :ctype:`PyCObject` *self* was
|
||||
created with.
|
||||
|
||||
|
||||
.. cfunction:: void* PyCObject_GetDesc(PyObject* self)
|
||||
|
||||
Return the description :ctype:`void \*` that the :ctype:`PyCObject` *self* was
|
||||
created with.
|
||||
|
||||
|
||||
.. cfunction:: int PyCObject_SetVoidPtr(PyObject* self, void* cobj)
|
||||
|
||||
Set the void pointer inside *self* to *cobj*. The :ctype:`PyCObject` must not
|
||||
have an associated destructor. Return true on success, false on failure.
|
|
@ -88,7 +88,6 @@
|
|||
#include "funcobject.h"
|
||||
#include "classobject.h"
|
||||
#include "fileobject.h"
|
||||
#include "cobject.h"
|
||||
#include "pycapsule.h"
|
||||
#include "traceback.h"
|
||||
#include "sliceobject.h"
|
||||
|
|
|
@ -1,61 +0,0 @@
|
|||
|
||||
/*
|
||||
|
||||
The CObject module is now *deprecated* as of Python 3.1.
|
||||
Please use the Capsule API instead; see "pycapsule.h".
|
||||
|
||||
*/
|
||||
|
||||
#ifndef Py_COBJECT_H
|
||||
#define Py_COBJECT_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PyCObject_Type;
|
||||
|
||||
#define PyCObject_Check(op) (Py_TYPE(op) == &PyCObject_Type)
|
||||
|
||||
/* Create a PyCObject from a pointer to a C object and an optional
|
||||
destructor function. If the second argument is non-null, then it
|
||||
will be called with the first argument if and when the PyCObject is
|
||||
destroyed.
|
||||
|
||||
*/
|
||||
PyAPI_FUNC(PyObject *) PyCObject_FromVoidPtr(
|
||||
void *cobj, void (*destruct)(void*));
|
||||
|
||||
|
||||
/* Create a PyCObject from a pointer to a C object, a description object,
|
||||
and an optional destructor function. If the third argument is non-null,
|
||||
then it will be called with the first and second arguments if and when
|
||||
the PyCObject is destroyed.
|
||||
*/
|
||||
PyAPI_FUNC(PyObject *) PyCObject_FromVoidPtrAndDesc(
|
||||
void *cobj, void *desc, void (*destruct)(void*,void*));
|
||||
|
||||
/* Retrieve a pointer to a C object from a PyCObject. */
|
||||
PyAPI_FUNC(void *) PyCObject_AsVoidPtr(PyObject *);
|
||||
|
||||
/* Retrieve a pointer to a description object from a PyCObject. */
|
||||
PyAPI_FUNC(void *) PyCObject_GetDesc(PyObject *);
|
||||
|
||||
/* Import a pointer to a C object from a module using a PyCObject. */
|
||||
PyAPI_FUNC(void *) PyCObject_Import(char *module_name, char *cobject_name);
|
||||
|
||||
/* Modify a C object. Fails (==0) if object has a destructor. */
|
||||
PyAPI_FUNC(int) PyCObject_SetVoidPtr(PyObject *self, void *cobj);
|
||||
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
void *cobject;
|
||||
void *desc;
|
||||
void (*destructor)(void *);
|
||||
} PyCObject;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* !Py_COBJECT_H */
|
|
@ -327,7 +327,6 @@ OBJECT_OBJS= \
|
|||
Objects/bytesobject.o \
|
||||
Objects/cellobject.o \
|
||||
Objects/classobject.o \
|
||||
Objects/cobject.o \
|
||||
Objects/codeobject.o \
|
||||
Objects/complexobject.o \
|
||||
Objects/descrobject.o \
|
||||
|
@ -622,7 +621,6 @@ PYTHON_HEADERS= \
|
|||
Include/cellobject.h \
|
||||
Include/ceval.h \
|
||||
Include/classobject.h \
|
||||
Include/cobject.h \
|
||||
Include/code.h \
|
||||
Include/codecs.h \
|
||||
Include/compile.h \
|
||||
|
|
|
@ -12,6 +12,8 @@ What's New in Python 3.2 Alpha 1?
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- The deprecated PyCObject has been removed.
|
||||
|
||||
- Issue #6347: Include inttypes.h as well as stdint.h in pyport.h.
|
||||
This fixes a build failure on HP-UX: int32_t and uint32_t are
|
||||
defined in inttypes.h instead of stdint.h on that platform.
|
||||
|
|
|
@ -1,169 +0,0 @@
|
|||
|
||||
/* Wrap void* pointers to be passed between C modules */
|
||||
|
||||
#include "Python.h"
|
||||
|
||||
|
||||
/* Declarations for objects of type PyCObject */
|
||||
|
||||
typedef void (*destructor1)(void *);
|
||||
typedef void (*destructor2)(void *, void*);
|
||||
|
||||
|
||||
static int deprecation_exception(void)
|
||||
{
|
||||
return PyErr_WarnEx(PyExc_PendingDeprecationWarning,
|
||||
"The CObject API is deprecated as of Python 3.1. "
|
||||
"Please convert to using the Capsule API.", 1);
|
||||
}
|
||||
|
||||
PyObject *
|
||||
PyCObject_FromVoidPtr(void *cobj, void (*destr)(void *))
|
||||
{
|
||||
PyCObject *self;
|
||||
|
||||
if (deprecation_exception()) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
self = PyObject_NEW(PyCObject, &PyCObject_Type);
|
||||
if (self == NULL)
|
||||
return NULL;
|
||||
self->cobject=cobj;
|
||||
self->destructor=destr;
|
||||
self->desc=NULL;
|
||||
|
||||
return (PyObject *)self;
|
||||
}
|
||||
|
||||
PyObject *
|
||||
PyCObject_FromVoidPtrAndDesc(void *cobj, void *desc,
|
||||
void (*destr)(void *, void *))
|
||||
{
|
||||
PyCObject *self;
|
||||
|
||||
if (deprecation_exception()) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!desc) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"PyCObject_FromVoidPtrAndDesc called with null"
|
||||
" description");
|
||||
return NULL;
|
||||
}
|
||||
self = PyObject_NEW(PyCObject, &PyCObject_Type);
|
||||
if (self == NULL)
|
||||
return NULL;
|
||||
self->cobject = cobj;
|
||||
self->destructor = (destructor1)destr;
|
||||
self->desc = desc;
|
||||
|
||||
return (PyObject *)self;
|
||||
}
|
||||
|
||||
void *
|
||||
PyCObject_AsVoidPtr(PyObject *self)
|
||||
{
|
||||
if (self) {
|
||||
if (self->ob_type == &PyCObject_Type)
|
||||
return ((PyCObject *)self)->cobject;
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"PyCObject_AsVoidPtr with non-C-object");
|
||||
}
|
||||
if (!PyErr_Occurred())
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"PyCObject_AsVoidPtr called with null pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void *
|
||||
PyCObject_GetDesc(PyObject *self)
|
||||
{
|
||||
if (self) {
|
||||
if (self->ob_type == &PyCObject_Type)
|
||||
return ((PyCObject *)self)->desc;
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"PyCObject_GetDesc with non-C-object");
|
||||
}
|
||||
if (!PyErr_Occurred())
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"PyCObject_GetDesc called with null pointer");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void *
|
||||
PyCObject_Import(char *module_name, char *name)
|
||||
{
|
||||
PyObject *m, *c;
|
||||
void *r = NULL;
|
||||
|
||||
if ((m = PyImport_ImportModule(module_name))) {
|
||||
if ((c = PyObject_GetAttrString(m,name))) {
|
||||
r = PyCObject_AsVoidPtr(c);
|
||||
Py_DECREF(c);
|
||||
}
|
||||
Py_DECREF(m);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
int
|
||||
PyCObject_SetVoidPtr(PyObject *self, void *cobj)
|
||||
{
|
||||
PyCObject* cself = (PyCObject*)self;
|
||||
if (cself == NULL || !PyCObject_Check(cself) ||
|
||||
cself->destructor != NULL) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"Invalid call to PyCObject_SetVoidPtr");
|
||||
return 0;
|
||||
}
|
||||
cself->cobject = cobj;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
PyCObject_dealloc(PyCObject *self)
|
||||
{
|
||||
if (self->destructor) {
|
||||
if(self->desc)
|
||||
((destructor2)(self->destructor))(self->cobject, self->desc);
|
||||
else
|
||||
(self->destructor)(self->cobject);
|
||||
}
|
||||
PyObject_DEL(self);
|
||||
}
|
||||
|
||||
|
||||
PyDoc_STRVAR(PyCObject_Type__doc__,
|
||||
"C objects to be exported from one extension module to another\n\
|
||||
\n\
|
||||
C objects are used for communication between extension modules. They\n\
|
||||
provide a way for an extension module to export a C interface to other\n\
|
||||
extension modules, so that extension modules can use the Python import\n\
|
||||
mechanism to link to one another.");
|
||||
|
||||
PyTypeObject PyCObject_Type = {
|
||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
||||
"PyCObject", /*tp_name*/
|
||||
sizeof(PyCObject), /*tp_basicsize*/
|
||||
0, /*tp_itemsize*/
|
||||
/* methods */
|
||||
(destructor)PyCObject_dealloc, /*tp_dealloc*/
|
||||
0, /*tp_print*/
|
||||
0, /*tp_getattr*/
|
||||
0, /*tp_setattr*/
|
||||
0, /*tp_reserved*/
|
||||
0, /*tp_repr*/
|
||||
0, /*tp_as_number*/
|
||||
0, /*tp_as_sequence*/
|
||||
0, /*tp_as_mapping*/
|
||||
0, /*tp_hash*/
|
||||
0, /*tp_call*/
|
||||
0, /*tp_str*/
|
||||
0, /*tp_getattro*/
|
||||
0, /*tp_setattro*/
|
||||
0, /*tp_as_buffer*/
|
||||
0, /*tp_flags*/
|
||||
PyCObject_Type__doc__ /*tp_doc*/
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue