[Zope-Checkins] CVS: Zope3/lib/python/Persistence/BTrees - BTreeModuleTemplate.c:1.1.2.5 BTreeTemplate.c:1.1.2.5 BucketTemplate.c:1.1.2.6 MergeTemplate.c:1.1.2.4 SetTemplate.c:1.1.2.6

Jeremy Hylton jeremy@zope.com
Thu, 28 Feb 2002 17:40:49 -0500


Update of /cvs-repository/Zope3/lib/python/Persistence/BTrees
In directory cvs.zope.org:/tmp/cvs-serv26295

Modified Files:
      Tag: Zope-3x-branch
	BTreeModuleTemplate.c BTreeTemplate.c BucketTemplate.c 
	MergeTemplate.c SetTemplate.c 
Log Message:
Rename PyMalloc and PyRealloc to BTree_Malloc and BTree_Realloc.

Do not convert errors raised by _p_resolveConflict() to
ConflictError.  If some other exception is raised, it is a bug in the
bucket code.


=== Zope3/lib/python/Persistence/BTrees/BTreeModuleTemplate.c 1.1.2.4 => 1.1.2.5 ===
 
 static void *
-PyMalloc(size_t sz)
+BTree_Malloc(size_t sz)
 {
-  void *r;
+    void *r;
 
-  ASSERT(sz > 0, "non-positive size malloc", NULL);
+    ASSERT(sz > 0, "non-positive size malloc", NULL);
 
-  if ((r=malloc(sz))) return r;
+    r = malloc(sz);
+    if (r)
+	return r;
 
-  PyErr_NoMemory();
-  return NULL;
+    PyErr_NoMemory();
+    return NULL;
 }
 
 static void *
-PyRealloc(void *p, size_t sz)
+BTree_Realloc(void *p, size_t sz)
 {
-  void *r;
+    void *r;
 
-  ASSERT(sz > 0, "non-positive size realloc", NULL);
+    ASSERT(sz > 0, "non-positive size realloc", NULL);
 
-  if (p) r=realloc(p,sz);
-  else r=malloc(sz);
-
-  UNLESS (r) PyErr_NoMemory();
-
-  return r;
+    if (p) 
+	r = realloc(p, sz);
+    else 
+	r = malloc(sz);
+    
+    UNLESS (r) 
+	PyErr_NoMemory();
+    
+    return r;
 }
 
 #include "BTreeItemsTemplate.c"


=== Zope3/lib/python/Persistence/BTrees/BTreeTemplate.c 1.1.2.4 => 1.1.2.5 ===
     ASSERT(next_size > 0, "split creates empty tree", -1);
   
-    next->data = PyMalloc(sizeof(BTreeItem) * next_size);
+    next->data = BTree_Malloc(sizeof(BTreeItem) * next_size);
     if (!next->data)
 	return -1;
     memcpy(next->data, self->data+index, sizeof(BTreeItem) * next_size);
@@ -133,7 +133,7 @@
       goto err;
 
   /* Create a new data buffer to hold two BTrees */
-  d = PyMalloc(sizeof(BTreeItem)*2);
+  d = BTree_Malloc(sizeof(BTreeItem)*2);
   if (d == NULL)
       goto err;
 
@@ -190,13 +190,13 @@
 
   if (self->len == self->size) {
       if (self->size) {
-          d = PyRealloc(self->data, sizeof(BTreeItem)*self->size*2);
+          d = BTree_Realloc(self->data, sizeof(BTreeItem)*self->size*2);
 	  if (d == NULL)
 	      return -1;
           self->data = d;
           self->size *= 2;
       } else {
-          d = PyMalloc(sizeof(BTreeItem) * 2);
+          d = BTree_Malloc(sizeof(BTreeItem) * 2);
 	  if (d == NULL)
 	      return -1;
           self->data = d;
@@ -580,40 +580,36 @@
 static PyObject *
 BTree_getstate(BTree *self, PyObject *args)
 {
-    PyObject *r=0, *o;
+    PyObject *r = NULL, *o;
     int i, l;
 
     PER_USE_OR_RETURN(self, NULL);
 
-    if (self->len)
-    {
-	UNLESS (r=PyTuple_New(self->len*2-1)) goto err;
+    if (self->len) {
+	r = PyTuple_New(self->len * 2 - 1);
+	if (r == NULL)
+	    goto err;
 	
 	if (self->len == 1 
 	    && self->data->value->ob_type != self->ob_type
 #ifdef PERSISTENT
 	    && BUCKET(self->data->value)->po_oid == NULL
 #endif
-          )
-        {
+	    ) {
 	    /* We have just one bucket. Save it's data directly. */
 	    o = bucket_getstate((Bucket *)self->data->value);
 	    if (o == NULL)
 		goto err;
 	    PyTuple_SET_ITEM(r, 0, o);
 	    ASSIGN(r, Py_BuildValue("(O)", r));
-        }
-	else
-        {
-	    for (i=0, l=0; i < self->len; i++)
-            {
-		if (i)
-                {
+        } else {
+	    for (i=0, l=0; i < self->len; i++) {
+		if (i) {
 		    COPY_KEY_TO_OBJECT(o, self->data[i].key);
-		    PyTuple_SET_ITEM(r,l,o);
+		    PyTuple_SET_ITEM(r, l, o);
 		    l++;
                 }
-		o=self->data[i].value;
+		o = self->data[i].value;
 		Py_INCREF(o);
 		PyTuple_SET_ITEM(r,l,o);
 		l++;
@@ -621,9 +617,7 @@
 	    ASSIGN(r, Py_BuildValue("OO", r, self->firstbucket));
         }
 	
-    }
-    else
-    {
+    } else {
 	r = Py_None;
 	Py_INCREF(r);
     }  
@@ -636,6 +630,7 @@
  err:
     PER_ALLOW_DEACTIVATION(self);
     PER_ACCESSED(self);
+    Py_XDECREF(r);
     return NULL;
 }
 
@@ -659,7 +654,7 @@
 	len = (len + 1) / 2;
 
 	if (len > self->size) {
-	    UNLESS (d = PyRealloc(self->data, sizeof(BTreeItem)*len)) 
+	    UNLESS (d = BTree_Realloc(self->data, sizeof(BTreeItem)*len)) 
 		return -1;
 	    self->data=d;
 	    self->size=len;
@@ -669,7 +664,8 @@
 	    if (i) {
 		COPY_KEY_FROM_ARG(d->key, PyTuple_GET_ITEM(items,l), copied);
 		l++;
-		UNLESS (&copied) return -1;
+		if (!copied)
+		    return -1;
 		INCREF_KEY(d->key);
             }
 	    d->value = PyTuple_GET_ITEM(items, l);
@@ -1028,7 +1024,7 @@
 static PyObject *
 BTree_keys(BTree *self, PyObject *args)
 {
-  return BTree_rangeSearch(self,args, 'k');
+    return BTree_rangeSearch(self, args, 'k');
 }
 
 /*
@@ -1037,7 +1033,7 @@
 static PyObject *
 BTree_values(BTree *self, PyObject *args)
 {
-  return BTree_rangeSearch(self,args,'v');
+    return BTree_rangeSearch(self, args, 'v');
 }
 
 /*
@@ -1046,7 +1042,7 @@
 static PyObject *
 BTree_items(BTree *self, PyObject *args)
 {
-  return BTree_rangeSearch(self,args,'i');
+    return BTree_rangeSearch(self, args, 'i');
 }
 
 static PyObject *


=== Zope3/lib/python/Persistence/BTrees/BucketTemplate.c 1.1.2.5 => 1.1.2.6 ===
 
     if (self->size) {
-	keys = PyRealloc(self->keys, sizeof(KEY_TYPE)*self->size*2);
+	keys = BTree_Realloc(self->keys, sizeof(KEY_TYPE) * self->size * 2);
 	if (keys == NULL)
 	    return -1;
 	if (!noval) {
-	    values = PyRealloc(self->values, 
-			       sizeof(VALUE_TYPE) * self->size * 2);
+	    values = BTree_Realloc(self->values, 
+				   sizeof(VALUE_TYPE) * self->size * 2);
 	    if (values == NULL)
 		return -1;
-	    self->values=values;
+	    self->values = values;
 	}
 	self->keys = keys;
 	self->size *= 2;
     } else {
-	self->keys = PyMalloc(sizeof(KEY_TYPE) * MIN_BUCKET_ALLOC);
+	self->keys = BTree_Malloc(sizeof(KEY_TYPE) * MIN_BUCKET_ALLOC);
 	if (self->keys == NULL)
 	    return -1;
 	if (!noval) {
-	    self->values = PyMalloc(sizeof(VALUE_TYPE) * MIN_BUCKET_ALLOC);
+	    self->values = BTree_Malloc(sizeof(VALUE_TYPE) * MIN_BUCKET_ALLOC);
 	    if (self->values == NULL)
 		return -1;
 	}
@@ -297,7 +297,6 @@
     } else
 	Py_INCREF(seq);
     
-
     iter = PyObject_GetIter(seq);
     if (iter == NULL)
 	goto err;
@@ -310,6 +309,7 @@
 		break;
 	}
 	if (!PyTuple_Check(o) || !PyTuple_GET_SIZE(o) == 2) {
+	    Py_DECREF(o);
 	    PyErr_SetString(PyExc_TypeError,
 			    "Sequence must contain 2-item tuples");
 	    goto err;
@@ -369,12 +369,12 @@
 
     next_size = self->len-index;
 
-    next->keys = PyMalloc(sizeof(KEY_TYPE) * next_size);
+    next->keys = BTree_Malloc(sizeof(KEY_TYPE) * next_size);
     if (!next->keys)
 	return -1;
     memcpy(next->keys, self->keys + index, sizeof(KEY_TYPE) * next_size);
     if (self->values) {
-	next->values = PyMalloc(sizeof(VALUE_TYPE) * next_size);
+	next->values = BTree_Malloc(sizeof(VALUE_TYPE) * next_size);
 	if (!next->values)
 	    /* XXX does this leak the keys? */
 	    return -1;
@@ -942,10 +942,10 @@
     }
   
     if (len > self->size) {
-	keys = PyRealloc(self->keys, sizeof(KEY_TYPE)*len);
+	keys = BTree_Realloc(self->keys, sizeof(KEY_TYPE)*len);
 	if (keys == NULL)
 	    return -1;
-	values = PyRealloc(self->values, sizeof(VALUE_TYPE)*len);
+	values = BTree_Realloc(self->values, sizeof(VALUE_TYPE)*len);
 	if (values == NULL)
 	    return -1;
 	self->keys = keys;
@@ -1078,17 +1078,6 @@
   Py_DECREF(b[0]);
   Py_DECREF(b[1]);
   Py_DECREF(b[2]);
-
-  if (r == NULL) {
-  	PyObject *error;
-  	PyObject *value;
-  	PyObject *traceback;
-
-  	PyErr_Fetch(&error, &value, &traceback);
-	Py_INCREF(ConflictError);
-	Py_XDECREF(error);
-	PyErr_Restore(ConflictError, value, traceback);
-  }
 
   return r;
 }


=== Zope3/lib/python/Persistence/BTrees/MergeTemplate.c 1.1.2.3 => 1.1.2.4 ===
 merge_output(Bucket *r, SetIteration *i, int mapping)
 {
-  if(r->len >= r->size && Bucket_grow(r, ! mapping) < 0) return -1;
-  COPY_KEY(r->keys[r->len], i->key);
-  INCREF_KEY(r->keys[r->len]);
-  if (mapping)
-    {
-      COPY_VALUE(r->values[r->len], i->value);
-      INCREF_VALUE(r->values[r->len]);
+    if (r->len >= r->size && Bucket_grow(r, !mapping) < 0) 
+	return -1;
+    COPY_KEY(r->keys[r->len], i->key);
+    INCREF_KEY(r->keys[r->len]);
+    if (mapping) {
+	COPY_VALUE(r->values[r->len], i->value);
+	INCREF_VALUE(r->values[r->len]);
     }
-  r->len++;
-  return 0;
+    r->len++;
+    return 0;
 }
 
 static PyObject *
@@ -60,26 +60,28 @@
   SetIteration i1 = {0,0,0}, i2 = {0,0,0}, i3 = {0,0,0};
   int cmp12, cmp13, cmp23, mapping=0, set;
 
-  if (initSetIteration(&i1, OBJECT(s1), 0, &mapping) < 0) return NULL;
-  if (initSetIteration(&i2, OBJECT(s2), 0, &mapping) < 0) return NULL;
-  if (initSetIteration(&i3, OBJECT(s3), 0, &mapping) < 0) return NULL;
+  if (initSetIteration(&i1, OBJECT(s1), 0, &mapping) < 0)
+      goto err;
+  if (initSetIteration(&i2, OBJECT(s2), 0, &mapping) < 0)
+      goto err;
+  if (initSetIteration(&i3, OBJECT(s3), 0, &mapping) < 0)
+      goto err;
 
-  set = ! mapping;
+  set = !mapping;
 
   if (mapping)
-    {
-      UNLESS(r=BUCKET(PyObject_CallObject(OBJECT(&BucketType), NULL)))
-        goto err;
-    }
+      r = (Bucket *)PyObject_CallObject((PyObject *)&BucketType, NULL);
   else
-    {
-      UNLESS(r=BUCKET(PyObject_CallObject(OBJECT(&SetType), NULL)))
-        goto err;
-    }
-
-  if (i1.next(&i1) < 0) return NULL;
-  if (i2.next(&i2) < 0) return NULL;
-  if (i3.next(&i3) < 0) return NULL;
+      r = (Bucket *)PyObject_CallObject((PyObject *)&SetType, NULL);
+  if (r == NULL)
+      goto err;
+
+  if (i1.next(&i1) < 0)
+      goto err;
+  if (i2.next(&i2) < 0)
+      goto err;
+  if (i3.next(&i3) < 0)
+      goto err;
 
   while (i1.position >= 0 && i2.position >= 0 && i3.position >= 0)
     {


=== Zope3/lib/python/Persistence/BTrees/SetTemplate.c 1.1.2.5 => 1.1.2.6 ===
   if (l > self->size)
     {
-      UNLESS (keys=PyRealloc(self->keys, sizeof(KEY_TYPE)*l)) return -1;
+      UNLESS (keys=BTree_Realloc(self->keys, sizeof(KEY_TYPE)*l)) return -1;
       self->keys=keys;
       self->size=l;
     }