Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
f1664ae1
Commit
f1664ae1
authored
Jul 01, 2009
by
Benjamin Peterson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove PyCObject
parent
286a0d2f
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
2 additions
and
292 deletions
+2
-292
Doc/c-api/cobject.rst
Doc/c-api/cobject.rst
+0
-59
Include/Python.h
Include/Python.h
+0
-1
Include/cobject.h
Include/cobject.h
+0
-61
Makefile.pre.in
Makefile.pre.in
+0
-2
Misc/NEWS
Misc/NEWS
+2
-0
Objects/cobject.c
Objects/cobject.c
+0
-169
No files found.
Doc/c-api/cobject.rst
deleted
100644 → 0
View file @
286a0d2f
.. 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.
Include/Python.h
View file @
f1664ae1
...
...
@@ -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"
...
...
Include/cobject.h
deleted
100644 → 0
View file @
286a0d2f
/*
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 */
Makefile.pre.in
View file @
f1664ae1
...
...
@@ -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
\
...
...
Misc/NEWS
View file @
f1664ae1
...
...
@@ -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.
...
...
Objects/cobject.c
deleted
100644 → 0
View file @
286a0d2f
/* 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*/
};
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment