[Zope-Checkins] CVS: Zope3/lib/python/Persistence - cPersistenceAPI.h:1.1.2.1
Jeremy Hylton
jeremy@zope.com
Wed, 20 Feb 2002 18:25:37 -0500
Update of /cvs-repository/Zope3/lib/python/Persistence
In directory cvs.zope.org:/tmp/cvs-serv14769/lib/python/Persistence
Added Files:
Tag: Zope-3x-branch
cPersistenceAPI.h
Log Message:
Add a separate include file that defines the C API for C extensions.
=== Added File Zope3/lib/python/Persistence/cPersistenceAPI.h ===
/* The PyPersist_C_API provides access to types and functions defined
in the cPersistence extension module to other extension modules.
On some (all?) platforms, it isn't possible to have static
references to functions and objects defined in other dynamically
loaded modules. The PyPersist_C_API defines a collection of
pointers to the shared functions that can be initialized when a
module is loaded.
*/
static PyPersist_C_API_struct *PyPersist_C_API;
#define PyPersist_TYPE PyPersist_C_API->type
/* Macros for compatibility with ZODB 3 C extensions. */
#define PER_USE_OR_RETURN(O, R) \
{ \
if (((O)->po_state == GHOST) \
&& (PyPersist_C_API->load((PyPersistObject *)(O)) < 0)) \
return (R); \
else if ((O)->po_state == UPTODATE) \
(O)->po_state = STICKY; \
}
#define PER_CHANGED(O) PyPersist_C_API->reg_trans((PyPersistObject *)(O))
#define PER_ALLOW_DEACTIVATION(O) \
{ \
if ((O)->po_state == STICKY) \
(O)->po_state = UPTODATE; \
}
#define PER_PREVENT_DEACTIVATION(O) \
{ \
if ((O)->po_state == UPTODATE) \
(O)->po_state = STICKY; \
}
/* XXX is this right? */
#define PER_DEL(O) Py_DECREF(O)
#define PER_USE(O) \
((((PyPersistObject *)(O))->po_state != GHOST) \
|| (PyPersist_C_API->load((PyPersistObject *)(O)) >= 0) \
? ((((PyPersistObject *)(O))->po_state == UPTODATE) \
? (((PyPersistObject *)(O))->po_state = STICKY) : 1) : 0)
#define PER_ACCESSED(O) PyPersist_C_API->set_atime((PyPersistObject *)O)