[Zodb-checkins] CVS: StandaloneZODB/BTrees - BTreeModuleTemplate.c:1.19 BTreeTemplate.c:1.22 BucketTemplate.c:1.26 IIBTree.py:1.5 IOBTree.py:1.5 OIBTree.py:1.5 OOBTree.py:1.5 SetOpTemplate.c:1.11 SetTemplate.c:1.14 TreeSetTemplate.c:1.12 _IIBTree.c:1.4 _IOBTree.c:1.4 __init__.py:1.4
Jeremy Hylton
jeremy@zope.com
Wed, 20 Feb 2002 18:59:52 -0500
Update of /cvs-repository/StandaloneZODB/BTrees
In directory cvs.zope.org:/tmp/cvs-serv23312/Persistence/BTrees
Modified Files:
BTreeModuleTemplate.c BTreeTemplate.c BucketTemplate.c
IIBTree.py IOBTree.py OIBTree.py OOBTree.py SetOpTemplate.c
SetTemplate.c TreeSetTemplate.c _IIBTree.c _IOBTree.c
__init__.py
Log Message:
Initial cut at BTrees implementation. It compiles, but does not work.
=== StandaloneZODB/BTrees/BTreeModuleTemplate.c 1.18 => 1.19 ===
****************************************************************************/
+#include "Python.h"
#ifdef PERSISTENT
#include "cPersistence.h"
+#include "cPersistenceAPI.h"
-/***************************************************************
- The following are macros that ought to be in cPersistence.h */
-#ifndef PER_USE
-
-#define PER_USE(O) \
-(((O)->state != cPersistent_GHOST_STATE \
- || (cPersistenceCAPI->setstate((PyObject*)(O)) >= 0)) \
- ? (((O)->state==cPersistent_UPTODATE_STATE) \
- ? ((O)->state=cPersistent_STICKY_STATE) : 1) : 0)
-
-#define PER_ACCESSED(O) ((O)->atime=((long)(time(NULL)/3))%65536)
-
-
-#endif
/***************************************************************/
#else
@@ -70,7 +58,7 @@
typedef struct Bucket_s {
#ifdef PERSISTENT
- cPersistent_HEAD
+ PyPersist_HEAD
#else
PyObject_HEAD
#endif
@@ -88,7 +76,7 @@
typedef struct {
#ifdef PERSISTENT
- cPersistent_HEAD
+ PyPersist_HEAD
#else
PyObject_HEAD
#endif
@@ -97,7 +85,7 @@
BTreeItem *data;
} BTree;
-staticforward PyExtensionClass BTreeType;
+staticforward PyTypeObject BTreeType;
#define BTREE(O) ((BTree*)(O))
@@ -282,44 +270,37 @@
BTREEITEMSTEMPLATE_C
;
+int
+init_persist_type(PyTypeObject *type)
+{
+ type->ob_type = &PyType_Type;
+ type->tp_getattro = PyPersist_TYPE->tp_getattro;
+ type->tp_setattro = PyPersist_TYPE->tp_setattro;
+
+ /* XXX for now */
+ type->tp_traverse = PyPersist_TYPE->tp_traverse;
+ type->tp_clear = PyPersist_TYPE->tp_clear;
+
+ return PyType_Ready(type);
+}
+
void
INITMODULE (void)
{
PyObject *m, *d, *c;
- UNLESS (sort_str=PyString_FromString("sort")) return;
- UNLESS (reverse_str=PyString_FromString("reverse")) return;
- UNLESS (items_str=PyString_FromString("items")) return;
- UNLESS (__setstate___str=PyString_FromString("__setstate__")) return;
-
- UNLESS (PyExtensionClassCAPI=PyCObject_Import("ExtensionClass","CAPI"))
+ sort_str = PyString_InternFromString("sort");
+ if (!sort_str)
+ return;
+ reverse_str = PyString_InternFromString("reverse");
+ if (!reverse_str)
+ return;
+ __setstate___str = PyString_InternFromString("__setstate__");
+ if (!__setstate___str)
return;
-
-#ifdef PERSISTENT
- if ((cPersistenceCAPI=PyCObject_Import("cPersistence","CAPI")))
- {
- BucketType.methods.link=cPersistenceCAPI->methods;
- BucketType.tp_getattro=cPersistenceCAPI->getattro;
- BucketType.tp_setattro=cPersistenceCAPI->setattro;
-
- SetType.methods.link=cPersistenceCAPI->methods;
- SetType.tp_getattro=cPersistenceCAPI->getattro;
- SetType.tp_setattro=cPersistenceCAPI->setattro;
-
- BTreeType.methods.link=cPersistenceCAPI->methods;
- BTreeType.tp_getattro=cPersistenceCAPI->getattro;
- BTreeType.tp_setattro=cPersistenceCAPI->setattro;
-
- TreeSetType.methods.link=cPersistenceCAPI->methods;
- TreeSetType.tp_getattro=cPersistenceCAPI->getattro;
- TreeSetType.tp_setattro=cPersistenceCAPI->setattro;
- }
- else return;
/* Grab the ConflictError class */
-
m = PyImport_ImportModule("ZODB.POSException");
-
if (m != NULL) {
c = PyObject_GetAttrString(m, "BTreesConflictError");
if (c != NULL)
@@ -332,31 +313,40 @@
ConflictError=PyExc_ValueError;
}
-#else
- BTreeType.tp_getattro=PyExtensionClassCAPI->getattro;
- BucketType.tp_getattro=PyExtensionClassCAPI->getattro;
- SetType.tp_getattro=PyExtensionClassCAPI->getattro;
- TreeSetType.tp_getattro=PyExtensionClassCAPI->getattro;
-#endif
-
- BTreeItemsType.ob_type=&PyType_Type;
-
#ifdef INTSET_H
UNLESS(d = PyImport_ImportModule("intSet")) return;
UNLESS(intSetType = PyObject_GetAttrString (d, "intSet")) return;
Py_DECREF (d);
#endif
+ /* Initialize the PyPersist_C_API and the type objects. */
+ PyPersist_C_API = PyCObject_Import("Persistence.cPersistence", "C_API");
+ if (PyPersist_C_API == NULL)
+ return;
+
+ BTreeItemsType.ob_type = &PyType_Type;
+ init_persist_type(&BucketType);
+ init_persist_type(&BTreeType);
+ init_persist_type(&SetType);
+ init_persist_type(&TreeSetType);
+
/* Create the module and add the functions */
- m = Py_InitModule4("_" MOD_NAME_PREFIX "BTree", module_methods,
- BTree_module_documentation,
- (PyObject*)NULL,PYTHON_API_VERSION);
+ m = Py_InitModule4("_" MOD_NAME_PREFIX "BTree",
+ module_methods, BTree_module_documentation,
+ (PyObject *)NULL, PYTHON_API_VERSION);
/* Add some symbolic constants to the module */
d = PyModule_GetDict(m);
-
- PyExtensionClass_Export(d,MOD_NAME_PREFIX "Bucket", BucketType);
- PyExtensionClass_Export(d,MOD_NAME_PREFIX "BTree", BTreeType);
- PyExtensionClass_Export(d,MOD_NAME_PREFIX "Set", SetType);
- PyExtensionClass_Export(d,MOD_NAME_PREFIX "TreeSet", TreeSetType);
+ if (PyDict_SetItemString(d, MOD_NAME_PREFIX "Bucket",
+ (PyObject *)&BucketType) < 0)
+ return;
+ if (PyDict_SetItemString(d, MOD_NAME_PREFIX "BTree",
+ (PyObject *)&BTreeType) < 0)
+ return;
+ if (PyDict_SetItemString(d, MOD_NAME_PREFIX "Set",
+ (PyObject *)&SetType) < 0)
+ return;
+ if (PyDict_SetItemString(d, MOD_NAME_PREFIX "TreeSet",
+ (PyObject *)&TreeSetType) < 0)
+ return;
}
=== StandaloneZODB/BTrees/BTreeTemplate.c 1.21 => 1.22 ===
&& self->len == 1 /* We have only one */
&& ! SameType_Check(self, self->data->value) /* It's our child */
- && BUCKET(self->data->value)->oid == NULL /* It's in our record */
+ && BUCKET(self->data->value)->po_oid == NULL /* It's in our record */
)
)
if (PER_CHANGED(self) < 0)
@@ -570,10 +570,10 @@
static PyObject *
BTree__p_deactivate(BTree *self, PyObject *args)
{
- if (self->state==cPersistent_UPTODATE_STATE && self->jar)
+ if (self->po_state == UPTODATE && self->po_dm)
{
if (_BTree_clear(self) < 0) return NULL;
- self->state=cPersistent_GHOST_STATE;
+ self->po_state = GHOST;
}
Py_INCREF(Py_None);
@@ -619,7 +619,7 @@
if (self->len == 1
&& self->data->value->ob_type != self->ob_type
#ifdef PERSISTENT
- && BUCKET(self->data->value)->oid == NULL
+ && BUCKET(self->data->value)->po_oid == NULL
#endif
)
{
@@ -731,9 +731,9 @@
{
if (! firstbucket) firstbucket=self->data->value;
- UNLESS (ExtensionClassSubclassInstance_Check(
- firstbucket,
- noval ? &SetType : &BucketType))
+ /* XXX what is this? */
+ if (!PyObject_IsInstance(firstbucket, (PyObject *)
+ (noval ? &SetType : &BucketType)))
{
PyErr_SetString(PyExc_TypeError,
"No firstbucket in non-empty BTree");
@@ -788,7 +788,7 @@
UNLESS (s[i]==Py_None || PyTuple_Check(s[i]))
return merge_error(-100, -100, -100, -100);
- if (ExtensionClassSubclassInstance_Check(self, &BTreeType))
+ if (PyObject_IsInstance((PyObject *)self, (PyObject *)&BTreeType))
r = _bucket__p_resolveConflict(OBJECT(&BucketType), s);
else
r = _bucket__p_resolveConflict(OBJECT(&SetType), s);
@@ -1238,11 +1238,7 @@
BTree_dealloc(BTree *self)
{
_BTree_clear(self);
-
- PER_DEL(self);
-
- Py_DECREF(self->ob_type);
- PyMem_DEL(self);
+ PyPersist_TYPE->tp_dealloc((PyObject *)self);
}
static int
@@ -1301,35 +1297,46 @@
0,0,0,0,0,0,0,0,0,0,
(inquiry)BTree_nonzero};
-static PyExtensionClass BTreeType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
- MOD_NAME_PREFIX "BTree", /*tp_name*/
- sizeof(BTree), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- /************* methods ********************/
- (destructor) BTree_dealloc,/*tp_dealloc*/
- (printfunc)0, /*tp_print*/
- (getattrfunc)0, /*obsolete tp_getattr*/
- (setattrfunc)0, /*obsolete tp_setattr*/
- (cmpfunc)0, /*tp_compare*/
- (reprfunc)0, /*tp_repr*/
- &BTree_as_number_for_nonzero, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- &BTree_as_mapping, /*tp_as_mapping*/
- (hashfunc)0, /*tp_hash*/
- (ternaryfunc)0, /*tp_call*/
- (reprfunc)0, /*tp_str*/
- (getattrofunc)0,
- 0, /*tp_setattro*/
-
- /* Space for future expansion */
- 0L,0L,
- "Mapping type implemented as sorted list of items",
- METHOD_CHAIN(BTree_methods),
- EXTENSIONCLASS_BASICNEW_FLAG
-#ifdef PERSISTENT
- | PERSISTENT_TYPE_FLAG
-#endif
- | EXTENSIONCLASS_NOINSTDICT_FLAG,
+static PyTypeObject BTreeType = {
+ PyObject_HEAD_INIT(NULL) /* PyPersist_Type */
+ 0, /* ob_size */
+ "Persistence.BTrees.OOBTree." MOD_NAME_PREFIX "BTree", /* tp_name */
+ sizeof(BTree), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)BTree_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ &BTree_as_number_for_nonzero, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ &BTree_as_mapping, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+/* XXX need to define traverse and clear functions */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
+ Py_TPFLAGS_BASETYPE, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ BTree_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
};
=== StandaloneZODB/BTrees/BucketTemplate.c 1.25 => 1.26 ===
bucket__p_deactivate(Bucket *self, PyObject *args)
{
- if (self->state==cPersistent_UPTODATE_STATE && self->jar)
+ if (self->po_state == UPTODATE && self->po_dm)
{
if (_bucket_clear(self) < 0) return NULL;
- self->state=cPersistent_GHOST_STATE;
+ self->po_state = GHOST;
}
Py_INCREF(Py_None);
@@ -1130,14 +1130,10 @@
};
static void
-Bucket_dealloc(Bucket *self)
+bucket_dealloc(Bucket *self)
{
_bucket_clear(self);
-
- PER_DEL(self);
-
- Py_DECREF(self->ob_type);
- PyMem_DEL(self);
+ PyPersist_TYPE->tp_dealloc((PyObject *)self);
}
/* Code to access Bucket objects as mappings */
@@ -1164,8 +1160,11 @@
static PyObject *format;
PyObject *r, *t;
- UNLESS (format) UNLESS (format=PyString_FromString(MOD_NAME_PREFIX "Bucket(%s)"))
- return NULL;
+ if (format == NULL) {
+ format = PyString_FromString(MOD_NAME_PREFIX "Bucket(%s)");
+ if (format == NULL)
+ return NULL;
+ }
UNLESS (t=PyTuple_New(1)) return NULL;
UNLESS (r=bucket_items(self,NULL)) goto err;
PyTuple_SET_ITEM(t,0,r);
@@ -1177,39 +1176,49 @@
return NULL;
}
-static PyExtensionClass BucketType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
- MOD_NAME_PREFIX "Bucket", /*tp_name*/
- sizeof(Bucket), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- /*********** methods ***********************/
- (destructor) Bucket_dealloc, /*tp_dealloc*/
- (printfunc)0, /*tp_print*/
- (getattrfunc)0, /*obsolete tp_getattr*/
- (setattrfunc)0, /*obsolete tp_setattr*/
- (cmpfunc)0, /*tp_compare*/
- (reprfunc) bucket_repr, /*tp_repr*/
- 0, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- &Bucket_as_mapping, /*tp_as_mapping*/
- (hashfunc)0, /*tp_hash*/
- (ternaryfunc)0, /*tp_call*/
- (reprfunc)0, /*tp_str*/
- (getattrofunc)0, /*tp_getattro*/
- 0, /*tp_setattro*/
-
- /* Space for future expansion */
- 0L,0L,
- "Mapping type implemented as sorted list of items",
- METHOD_CHAIN(Bucket_methods),
- EXTENSIONCLASS_BASICNEW_FLAG
-#ifdef PERSISTENT
- | PERSISTENT_TYPE_FLAG
-#endif
- | EXTENSIONCLASS_NOINSTDICT_FLAG,
+static PyTypeObject BucketType = {
+ PyObject_HEAD_INIT(NULL) /* PyPersist_Type */
+ 0, /* ob_size */
+ MOD_NAME_PREFIX "Bucket", /* tp_name */
+ sizeof(Bucket), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)bucket_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ (reprfunc)bucket_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ &Bucket_as_mapping, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+/* XXX need to define traverse and clear functions */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
+ Py_TPFLAGS_BASETYPE, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Bucket_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
};
-
static int
nextBucket(SetIteration *i)
=== StandaloneZODB/BTrees/IIBTree.py 1.4 => 1.5 ===
# We don't really want _ names in pickles, so update all of the __module__
# references.
-for o in globals().values():
- if hasattr(o, '__module__'):
- o.__module__=__name__
+##for o in globals().values():
+## if hasattr(o, '__module__'):
+## o.__module__=__name__
=== StandaloneZODB/BTrees/IOBTree.py 1.4 => 1.5 ===
# We don't really want _ names in pickles, so update all of the __module__
# references.
-for o in globals().values():
- if hasattr(o, '__module__'):
- o.__module__=__name__
+##for o in globals().values():
+## if hasattr(o, '__module__'):
+## o.__module__=__name__
=== StandaloneZODB/BTrees/OIBTree.py 1.4 => 1.5 ===
# We don't really want _ names in pickles, so update all of the __module__
# references.
-for o in globals().values():
- if hasattr(o, '__module__'):
- o.__module__=__name__
+##for o in globals().values():
+## if hasattr(o, '__module__'):
+## o.__module__=__name__
=== StandaloneZODB/BTrees/OOBTree.py 1.4 => 1.5 ===
# We don't really want _ names in pickles, so update all of the __module__
# references.
-for o in globals().values():
- if hasattr(o, '__module__'):
- o.__module__=__name__
+##for o in globals().values():
+## print o
+## if hasattr(o, '__module__'):
+## o.__module__=__name__
+
+# XXX can't figure out why _reduce() won't call our __getstate__.
+
+import copy_reg
+
+def pickle_OOBTree(t):
+ return t.__class__, t.__getstate__()
+
+def unpickle_OOBTree(state):
+ obj = OOBTree.__new__(OOBTree, None)
+ obj.__setstate__(state)
+ return obj
+
+copy_reg.pickle(OOBTree, pickle_OOBTree)
=== StandaloneZODB/BTrees/SetOpTemplate.c 1.10 => 1.11 ===
i->position=0;
- if (ExtensionClassSubclassInstance_Check(s, &BucketType))
+ if (PyObject_IsInstance(s, (PyObject *)&BucketType))
{
i->set = s;
Py_INCREF(s);
@@ -82,7 +82,7 @@
i->hasValue=1;
}
- else if (ExtensionClassSubclassInstance_Check(s, &SetType))
+ else if (PyObject_IsInstance(s, (PyObject *)&SetType))
{
i->set = s;
Py_INCREF(s);
@@ -90,7 +90,7 @@
i->next=nextSet;
i->hasValue=0;
}
- else if (ExtensionClassSubclassInstance_Check(s, &BTreeType))
+ else if (PyObject_IsInstance(s, (PyObject *)&BTreeType))
{
i->set=BTree_rangeSearch(BTREE(s), NULL, 'i');
UNLESS(i->set) return -1;
@@ -104,7 +104,7 @@
i->next=nextTreeSetItems;
i->hasValue=1;
}
- else if (ExtensionClassSubclassInstance_Check(s, &TreeSetType))
+ else if (PyObject_IsInstance(s, (PyObject *)&TreeSetType))
{
i->set=BTree_rangeSearch(BTREE(s), NULL, 'k');
UNLESS(i->set) return -1;
=== StandaloneZODB/BTrees/SetTemplate.c 1.13 => 1.14 ===
};
-static PyExtensionClass SetType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
- MOD_NAME_PREFIX "Set", /*tp_name*/
- sizeof(Bucket), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- /*********** methods ***********************/
- (destructor) Bucket_dealloc, /*tp_dealloc*/
- (printfunc)0, /*tp_print*/
- (getattrfunc)0, /*obsolete tp_getattr*/
- (setattrfunc)0, /*obsolete tp_setattr*/
- (cmpfunc)0, /*tp_compare*/
- (reprfunc) set_repr, /*tp_repr*/
- 0, /*tp_as_number*/
- &set_as_sequence, /*tp_as_sequence*/
- 0, /*tp_as_mapping*/
- (hashfunc)0, /*tp_hash*/
- (ternaryfunc)0, /*tp_call*/
- (reprfunc)0, /*tp_str*/
- (getattrofunc)0, /*tp_getattro*/
- 0, /*tp_setattro*/
-
- /* Space for future expansion */
- 0L,0L,
- "Set implemented as sorted keys",
- METHOD_CHAIN(Set_methods),
- EXTENSIONCLASS_BASICNEW_FLAG
-#ifdef PERSISTENT
- | PERSISTENT_TYPE_FLAG
-#endif
- | EXTENSIONCLASS_NOINSTDICT_FLAG,
+static PyTypeObject SetType = {
+ PyObject_HEAD_INIT(NULL) /* PyPersist_Type */
+ 0, /* ob_size */
+ MOD_NAME_PREFIX "Set", /* tp_name */
+ sizeof(Bucket), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)bucket_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ (reprfunc)set_repr, /* tp_repr */
+ 0, /* tp_as_number */
+ &set_as_sequence, /* 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 */
+/* XXX need to define traverse and clear functions */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
+ Py_TPFLAGS_BASETYPE, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ Set_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
};
static int
=== StandaloneZODB/BTrees/TreeSetTemplate.c 1.11 => 1.12 ===
};
-static PyExtensionClass TreeSetType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
- MOD_NAME_PREFIX "TreeSet", /*tp_name*/
- sizeof(BTree), /*tp_basicsize*/
- 0, /*tp_itemsize*/
- /************* methods ********************/
- (destructor) BTree_dealloc, /*tp_dealloc*/
- (printfunc)0, /*tp_print*/
- (getattrfunc)0, /*obsolete tp_getattr*/
- (setattrfunc)0, /*obsolete tp_setattr*/
- (cmpfunc)0, /*tp_compare*/
- (reprfunc)0, /*tp_repr*/
- &BTree_as_number_for_nonzero, /*tp_as_number*/
- 0, /*tp_as_sequence*/
- &TreeSet_as_mapping, /*tp_as_mapping*/
- (hashfunc)0, /*tp_hash*/
- (ternaryfunc)0, /*tp_call*/
- (reprfunc)0, /*tp_str*/
- (getattrofunc)0,
- 0, /*tp_setattro*/
-
- /* Space for future expansion */
- 0L,0L,
- "Set implemented as sorted tree of items",
- METHOD_CHAIN(TreeSet_methods),
- EXTENSIONCLASS_BASICNEW_FLAG
-#ifdef PERSISTENT
- | PERSISTENT_TYPE_FLAG
-#endif
- | EXTENSIONCLASS_NOINSTDICT_FLAG,
+static PyTypeObject TreeSetType = {
+ PyObject_HEAD_INIT(NULL) /* PyPersist_Type */
+ 0, /* ob_size */
+ MOD_NAME_PREFIX "TreeSet", /* tp_name */
+ sizeof(BTree), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ (destructor)BTree_dealloc, /* tp_dealloc */
+ 0, /* tp_print */
+ 0, /* tp_getattr */
+ 0, /* tp_setattr */
+ 0, /* tp_compare */
+ 0, /* tp_repr */
+ &BTree_as_number_for_nonzero, /* tp_as_number */
+ 0, /* tp_as_sequence */
+ &TreeSet_as_mapping, /* tp_as_mapping */
+ 0, /* tp_hash */
+ 0, /* tp_call */
+ 0, /* tp_str */
+ 0, /* tp_getattro */
+ 0, /* tp_setattro */
+ 0, /* tp_as_buffer */
+/* XXX need to define traverse and clear functions */
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
+ Py_TPFLAGS_BASETYPE, /* tp_flags */
+ 0, /* tp_doc */
+ 0, /* tp_traverse */
+ 0, /* tp_clear */
+ 0, /* tp_richcompare */
+ 0, /* tp_weaklistoffset */
+ 0, /* tp_iter */
+ 0, /* tp_iternext */
+ TreeSet_methods, /* tp_methods */
+ 0, /* tp_members */
+ 0, /* tp_getset */
+ 0, /* tp_base */
+ 0, /* tp_dict */
+ 0, /* tp_descr_get */
+ 0, /* tp_descr_set */
+ 0, /* tp_dictoffset */
+ 0, /* tp_init */
+ 0, /* tp_alloc */
+ PyType_GenericNew, /* tp_new */
};
=== StandaloneZODB/BTrees/_IIBTree.c 1.3 => 1.4 ===
#include "intkeymacros.h"
#include "intvaluemacros.h"
-#include "cPersistence.h"
#ifndef EXCLUDE_INTSET_SUPPORT
#include "BTree/intSet.h"
#endif
=== StandaloneZODB/BTrees/_IOBTree.c 1.3 => 1.4 ===
#include "intkeymacros.h"
#include "objectvaluemacros.h"
-#include "cPersistence.h"
#ifndef EXCLUDE_INTSET_SUPPORT
#include "BTree/intSet.h"
#endif
=== StandaloneZODB/BTrees/__init__.py 1.3 => 1.4 ===
+##import ZODB
-try: import intSet
-except: pass
-else: del intSet
+##try: import intSet
+##except: pass
+##else: del intSet
-# Register interfaces
-try: import Interface
-except ImportError: pass # Don't register interfaces if no scarecrow
-else:
- import Interfaces
- del Interfaces
- del Interface
+### Register interfaces
+##try: import Interface
+##except ImportError: pass # Don't register interfaces if no scarecrow
+##else:
+## import Interfaces
+## del Interfaces
+## del Interface