SVN: ZODB/trunk/src/BTrees/BTreeTemplate.c Consistent indentation.

Jim Fulton <[email protected]>
Newsgroups gmane.comp.python.zope.zodb.cvs
Message-ID <[email protected]>
Log message for revision 103271:
  Consistent indentation.
  

Changed:
  U   ZODB/trunk/src/BTrees/BTreeTemplate.c

-=-
Modified: ZODB/trunk/src/BTrees/BTreeTemplate.c
===================================================================
--- ZODB/trunk/src/BTrees/BTreeTemplate.c	2009-08-27 13:56:02 UTC (rev 103270)
+++ ZODB/trunk/src/BTrees/BTreeTemplate.c	2009-08-27 13:58:19 UTC (rev 103271)
@@ -10,7 +10,7 @@
   WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
   FOR A PARTICULAR PURPOSE
 
- ****************************************************************************/
+****************************************************************************/
 
 #define BTREETEMPLATE_C "$Id$\n"
 
@@ -26,115 +26,115 @@
 static int
 BTree_check_inner(BTree *self, Bucket *nextbucket)
 {
-    int i;
-    Bucket *bucketafter;
-    Sized *child;
-    char *errormsg = "internal error";  /* someone should have overriden */
-    Sized *activated_child = NULL;
-    int result = -1;    /* until proved innocent */
+  int i;
+  Bucket *bucketafter;
+  Sized *child;
+  char *errormsg = "internal error";  /* someone should have overriden */
+  Sized *activated_child = NULL;
+  int result = -1;    /* until proved innocent */
 
-#define CHECK(CONDITION, ERRORMSG)          \
-    if (!(CONDITION)) {                     \
-        errormsg = (ERRORMSG);              \
-        goto Error;                         \
-    }
+#define CHECK(CONDITION, ERRORMSG)              \
+  if (!(CONDITION)) {                           \
+    errormsg = (ERRORMSG);                      \
+    goto Error;                                 \
+  }
 
-    PER_USE_OR_RETURN(self, -1);
-    CHECK(self->len >= 0, "BTree len < 0");
-    CHECK(self->len <= self->size, "BTree len > size");
-    if (self->len == 0) {
-        /* Empty BTree. */
-        CHECK(self->firstbucket == NULL,
-              "Empty BTree has non-NULL firstbucket");
-        result = 0;
-        goto Done;
-    }
-    /* Non-empty BTree. */
-    CHECK(self->firstbucket != NULL, "Non-empty BTree has NULL firstbucket");
+  PER_USE_OR_RETURN(self, -1);
+  CHECK(self->len >= 0, "BTree len < 0");
+  CHECK(self->len <= self->size, "BTree len > size");
+  if (self->len == 0) {
+    /* Empty BTree. */
+    CHECK(self->firstbucket == NULL,
+          "Empty BTree has non-NULL firstbucket");
+    result = 0;
+    goto Done;
+  }
+  /* Non-empty BTree. */
+  CHECK(self->firstbucket != NULL, "Non-empty BTree has NULL firstbucket");
 
-    /* Obscure:  The first bucket is pointed to at least by self->firstbucket
-     * and data[0].child of whichever BTree node it's a child of.  However,
-     * if persistence is enabled then the latter BTree node may be a ghost
-     * at this point, and so its pointers "don't count":  we can only rely
-     * on self's pointers being intact.
-     */
+  /* Obscure:  The first bucket is pointed to at least by self->firstbucket
+   * and data[0].child of whichever BTree node it's a child of.  However,
+   * if persistence is enabled then the latter BTree node may be a ghost
+   * at this point, and so its pointers "don't count":  we can only rely
+   * on self's pointers being intact.
+   */
 #ifdef PERSISTENT
-    CHECK(self->firstbucket->ob_refcnt >= 1,
-          "Non-empty BTree firstbucket has refcount < 1");
+  CHECK(self->firstbucket->ob_refcnt >= 1,
+        "Non-empty BTree firstbucket has refcount < 1");
 #else
-    CHECK(self->firstbucket->ob_refcnt >= 2,
-          "Non-empty BTree firstbucket has refcount < 2");
+  CHECK(self->firstbucket->ob_refcnt >= 2,
+        "Non-empty BTree firstbucket has refcount < 2");
 #endif
 
+  for (i = 0; i < self->len; ++i) {
+    CHECK(self->data[i].child != NULL, "BTree has NULL child");
+  }
+
+  if (SameType_Check(self, self->data[0].child)) {
+    /* Our children are also BTrees. */
+    child = self->data[0].child;
+    UNLESS (PER_USE(child)) goto Done;
+    activated_child = child;
+    CHECK(self->firstbucket == BTREE(child)->firstbucket,
+          "BTree has firstbucket different than "
+          "its first child's firstbucket");
+    PER_ALLOW_DEACTIVATION(child);
+    activated_child = NULL;
     for (i = 0; i < self->len; ++i) {
-        CHECK(self->data[i].child != NULL, "BTree has NULL child");
+      child = self->data[i].child;
+      CHECK(SameType_Check(self, child),
+            "BTree children have different types");
+      if (i == self->len - 1)
+        bucketafter = nextbucket;
+      else {
+        BTree *child2 = BTREE(self->data[i+1].child);
+        UNLESS (PER_USE(child2)) goto Done;
+        bucketafter = child2->firstbucket;
+        PER_ALLOW_DEACTIVATION(child2);
+      }
+      if (BTree_check_inner(BTREE(child), bucketafter) < 0) goto Done;
     }
-
-    if (SameType_Check(self, self->data[0].child)) {
-        /* Our children are also BTrees. */
-        child = self->data[0].child;
-        UNLESS (PER_USE(child)) goto Done;
-        activated_child = child;
-        CHECK(self->firstbucket == BTREE(child)->firstbucket,
-               "BTree has firstbucket different than "
-               "its first child's firstbucket");
-        PER_ALLOW_DEACTIVATION(child);
-        activated_child = NULL;
-        for (i = 0; i < self->len; ++i) {
-            child = self->data[i].child;
-            CHECK(SameType_Check(self, child),
-                  "BTree children have different types");
-            if (i == self->len - 1)
-                bucketafter = nextbucket;
-            else {
-                BTree *child2 = BTREE(self->data[i+1].child);
-                UNLESS (PER_USE(child2)) goto Done;
-                bucketafter = child2->firstbucket;
-                PER_ALLOW_DEACTIVATION(child2);
-            }
-            if (BTree_check_inner(BTREE(child), bucketafter) < 0) goto Done;
-        }
-    }
-    else {
-        /* Our children are buckets. */
-        CHECK(self->firstbucket == BUCKET(self->data[0].child),
-              "Bottom-level BTree node has inconsistent firstbucket belief");
-        for (i = 0; i < self->len; ++i) {
-            child = self->data[i].child;
-            UNLESS (PER_USE(child)) goto Done;
-            activated_child = child;
-            CHECK(!SameType_Check(self, child),
-                  "BTree children have different types");
-            CHECK(child->len >= 1, "Bucket length < 1"); /* no empty buckets! */
-            CHECK(child->len <= child->size, "Bucket len > size");
+  }
+  else {
+    /* Our children are buckets. */
+    CHECK(self->firstbucket == BUCKET(self->data[0].child),
+          "Bottom-level BTree node has inconsistent firstbucket belief");
+    for (i = 0; i < self->len; ++i) {
+      child = self->data[i].child;
+      UNLESS (PER_USE(child)) goto Done;
+      activated_child = child;
+      CHECK(!SameType_Check(self, child),
+            "BTree children have different types");
+      CHECK(child->len >= 1, "Bucket length < 1"); /* no empty buckets! */
+      CHECK(child->len <= child->size, "Bucket len > size");
 #ifdef PERSISTENT
-            CHECK(child->ob_refcnt >= 1, "Bucket has refcount < 1");
+      CHECK(child->ob_refcnt >= 1, "Bucket has refcount < 1");
 #else
-            CHECK(child->ob_refcnt >= 2, "Bucket has refcount < 2");
+      CHECK(child->ob_refcnt >= 2, "Bucket has refcount < 2");
 #endif
-            if (i == self->len - 1)
-                bucketafter = nextbucket;
-            else
-                bucketafter = BUCKET(self->data[i+1].child);
-            CHECK(BUCKET(child)->next == bucketafter,
-                  "Bucket next pointer is damaged");
-            PER_ALLOW_DEACTIVATION(child);
-            activated_child = NULL;
-        }
+      if (i == self->len - 1)
+        bucketafter = nextbucket;
+      else
+        bucketafter = BUCKET(self->data[i+1].child);
+      CHECK(BUCKET(child)->next == bucketafter,
+            "Bucket next pointer is damaged");
+      PER_ALLOW_DEACTIVATION(child);
+      activated_child = NULL;
     }
-    result = 0;
-    goto Done;
+  }
+  result = 0;
+  goto Done;
 
-Error:
-    PyErr_SetString(PyExc_AssertionError, errormsg);
-    result = -1;
-Done:
-    /* No point updating access time -- this isn't a "real" use. */
-    PER_ALLOW_DEACTIVATION(self);
-    if (activated_child) {
-        PER_ALLOW_DEACTIVATION(activated_child);
-    }
-    return result;
+ Error:
+  PyErr_SetString(PyExc_AssertionError, errormsg);
+  result = -1;
+ Done:
+  /* No point updating access time -- this isn't a "real" use. */
+  PER_ALLOW_DEACTIVATION(self);
+  if (activated_child) {
+    PER_ALLOW_DEACTIVATION(activated_child);
+  }
+  return result;
 
 #undef CHECK
 }
@@ -147,14 +147,14 @@
 static PyObject*
 BTree_check(BTree *self)
 {
-    PyObject *result = NULL;
-    int i = BTree_check_inner(self, NULL);
+  PyObject *result = NULL;
+  int i = BTree_check_inner(self, NULL);
 
-    if (i >= 0) {
-        result = Py_None;
-        Py_INCREF(result);
-    }
-    return result;
+  if (i >= 0) {
+    result = Py_None;
+    Py_INCREF(result);
+  }
+  return result;
 }
 
 /*
@@ -179,44 +179,44 @@
 static PyObject *
 _BTree_get(BTree *self, PyObject *keyarg, int has_key)
 {
-    KEY_TYPE key;
-    PyObject *result = NULL;    /* guilty until proved innocent */
-    int copied = 1;
+  KEY_TYPE key;
+  PyObject *result = NULL;    /* guilty until proved innocent */
+  int copied = 1;
 
-    COPY_KEY_FROM_ARG(key, keyarg, copied);
-    UNLESS (copied) return NULL;
+  COPY_KEY_FROM_ARG(key, keyarg, copied);
+  UNLESS (copied) return NULL;
 
-    PER_USE_OR_RETURN(self, NULL);
-    if (self->len == 0) {
-        /* empty BTree */
-        if (has_key)
-            result = PyInt_FromLong(0);
-        else
-            PyErr_SetObject(PyExc_KeyError, keyarg);
-    }
-    else {
-        for (;;) {
-            int i;
-            Sized *child;
+  PER_USE_OR_RETURN(self, NULL);
+  if (self->len == 0) {
+    /* empty BTree */
+    if (has_key)
+      result = PyInt_FromLong(0);
+    else
+      PyErr_SetObject(PyExc_KeyError, keyarg);
+  }
+  else {
+    for (;;) {
+      int i;
+      Sized *child;
 
-            BTREE_SEARCH(i, self, key, goto Done);
-            child = self->data[i].child;
-            has_key += has_key != 0;    /* bump depth counter, maybe */
-            if (SameType_Check(self, child)) {
-                PER_UNUSE(self);
-                self = BTREE(child);
-                PER_USE_OR_RETURN(self, NULL);
-            }
-            else {
-                result = _bucket_get(BUCKET(child), keyarg, has_key);
-                break;
-            }
-        }
+      BTREE_SEARCH(i, self, key, goto Done);
+      child = self->data[i].child;
+      has_key += has_key != 0;    /* bump depth counter, maybe */
+      if (SameType_Check(self, child)) {
+        PER_UNUSE(self);
+        self = BTREE(child);
+        PER_USE_OR_RETURN(self, NULL);
+      }
+      else {
+        result = _bucket_get(BUCKET(child), keyarg, has_key);
+        break;
+      }
     }
+  }
 
-Done:
-    PER_UNUSE(self);
-    return result;
+ Done:
+  PER_UNUSE(self);
+  return result;
 }
 
 static PyObject *
@@ -232,21 +232,21 @@
 static Sized *
 BTree_newBucket(BTree *self)
 {
-    PyObject *factory;
-    Sized *result;
+  PyObject *factory;
+  Sized *result;
 
-    /* _bucket_type_str defined in BTreeModuleTemplate.c */
-    factory = PyObject_GetAttr((PyObject *)self->ob_type, _bucket_type_str);
-    if (factory == NULL)
-	return NULL;
-    /* TODO: Should we check that the factory actually returns something
-       of the appropriate type? How?  The C code here is going to
-       depend on any custom bucket type having the same layout at the
-       C level.
-    */
-    result = SIZED(PyObject_CallObject(factory, NULL));
-    Py_DECREF(factory);
-    return result;
+  /* _bucket_type_str defined in BTreeModuleTemplate.c */
+  factory = PyObject_GetAttr((PyObject *)self->ob_type, _bucket_type_str);
+  if (factory == NULL)
+    return NULL;
+  /* TODO: Should we check that the factory actually returns something
+     of the appropriate type? How?  The C code here is going to
+     depend on any custom bucket type having the same layout at the
+     C level.
+  */
+  result = SIZED(PyObject_CallObject(factory, NULL));
+  Py_DECREF(factory);
+  return result;
 }
 
 /*
@@ -264,36 +264,36 @@
 static int
 BTree_split(BTree *self, int index, BTree *next)
 {
-    int next_size;
-    Sized *child;
+  int next_size;
+  Sized *child;
 
-    if (index < 0 || index >= self->len)
-	index = self->len / 2;
+  if (index < 0 || index >= self->len)
+    index = self->len / 2;
 
-    next_size = self->len - index;
-    ASSERT(index > 0, "split creates empty tree", -1);
-    ASSERT(next_size > 0, "split creates empty tree", -1);
+  next_size = self->len - index;
+  ASSERT(index > 0, "split creates empty tree", -1);
+  ASSERT(next_size > 0, "split creates empty tree", -1);
 
-    next->data = BTree_Malloc(sizeof(BTreeItem) * next_size);
-    if (!next->data)
-	return -1;
-    memcpy(next->data, self->data + index, sizeof(BTreeItem) * next_size);
-    next->size = next_size;  /* but don't set len until we succeed */
+  next->data = BTree_Malloc(sizeof(BTreeItem) * next_size);
+  if (!next->data)
+    return -1;
+  memcpy(next->data, self->data + index, sizeof(BTreeItem) * next_size);
+  next->size = next_size;  /* but don't set len until we succeed */
 
-    /* Set next's firstbucket.  self->firstbucket is still correct. */
-    child = next->data[0].child;
-    if (SameType_Check(self, child)) {
-        PER_USE_OR_RETURN(child, -1);
-	next->firstbucket = BTREE(child)->firstbucket;
-	PER_UNUSE(child);
-    }
-    else
-	next->firstbucket = BUCKET(child);
-    Py_INCREF(next->firstbucket);
+  /* Set next's firstbucket.  self->firstbucket is still correct. */
+  child = next->data[0].child;
+  if (SameType_Check(self, child)) {
+    PER_USE_OR_RETURN(child, -1);
+    next->firstbucket = BTREE(child)->firstbucket;
+    PER_UNUSE(child);
+  }
+  else
+    next->firstbucket = BUCKET(child);
+  Py_INCREF(next->firstbucket);
 
-    next->len = next_size;
-    self->len = index;
-    return PER_CHANGED(self) >= 0 ? 0 : -1;
+  next->len = next_size;
+  self->len = index;
+  return PER_CHANGED(self) >= 0 ? 0 : -1;
 }
 
 
@@ -314,32 +314,32 @@
 static int
 BTree_split_root(BTree *self, int noval)
 {
-    BTree *child;
-    BTreeItem *d;
+  BTree *child;
+  BTreeItem *d;
 
-    /* Create a child BTree, and a new data vector for self. */
-    child = BTREE(PyObject_CallObject(OBJECT(self->ob_type), NULL));
-    if (!child) return -1;
+  /* Create a child BTree, and a new data vector for self. */
+  child = BTREE(PyObject_CallObject(OBJECT(self->ob_type), NULL));
+  if (!child) return -1;
 
-    d = BTree_Malloc(sizeof(BTreeItem) * 2);
-    if (!d) {
-        Py_DECREF(child);
-        return -1;
-    }
+  d = BTree_Malloc(sizeof(BTreeItem) * 2);
+  if (!d) {
+    Py_DECREF(child);
+    return -1;
+  }
 
-    /* Move our data to new BTree. */
-    child->size = self->size;
-    child->len = self->len;
-    child->data = self->data;
-    child->firstbucket = self->firstbucket;
-    Py_INCREF(child->firstbucket);
+  /* Move our data to new BTree. */
+  child->size = self->size;
+  child->len = self->len;
+  child->data = self->data;
+  child->firstbucket = self->firstbucket;
+  Py_INCREF(child->firstbucket);
 
-    /* Point self to child and split the child. */
-    self->data = d;
-    self->len = 1;
-    self->size = 2;
-    self->data[0].child = SIZED(child); /* transfers reference ownership */
-    return BTree_grow(self, 0, noval);
+  /* Point self to child and split the child. */
+  self->data = d;
+  self->len = 1;
+  self->size = 2;
+  self->data[0].child = SIZED(child); /* transfers reference ownership */
+  return BTree_grow(self, 0, noval);
 }
 
 /*
@@ -369,83 +369,83 @@
   BTreeItem *d;
 
   if (self->len == self->size) {
-      if (self->size) {
-          d = BTree_Realloc(self->data, sizeof(BTreeItem) * self->size * 2);
-	  if (d == NULL)
+    if (self->size) {
+      d = BTree_Realloc(self->data, sizeof(BTreeItem) * self->size * 2);
+      if (d == NULL)
 	      return -1;
-          self->data = d;
-          self->size *= 2;
-      }
-      else {
-          d = BTree_Malloc(sizeof(BTreeItem) * 2);
-	  if (d == NULL)
+      self->data = d;
+      self->size *= 2;
+    }
+    else {
+      d = BTree_Malloc(sizeof(BTreeItem) * 2);
+      if (d == NULL)
 	      return -1;
-          self->data = d;
-          self->size = 2;
-      }
+      self->data = d;
+      self->size = 2;
+    }
   }
 
   if (self->len) {
-      d = self->data + index;
-      v = d->child;
-      /* Create a new object of the same type as the target value */
-      e = (Sized *)PyObject_CallObject((PyObject *)v->ob_type, NULL);
-      if (e == NULL)
-	  return -1;
+    d = self->data + index;
+    v = d->child;
+    /* Create a new object of the same type as the target value */
+    e = (Sized *)PyObject_CallObject((PyObject *)v->ob_type, NULL);
+    if (e == NULL)
+      return -1;
 
-      UNLESS(PER_USE(v)) {
-          Py_DECREF(e);
-          return -1;
-      }
+    UNLESS(PER_USE(v)) {
+      Py_DECREF(e);
+      return -1;
+    }
 
-      /* Now split between the original (v) and the new (e) at the midpoint*/
-      if (SameType_Check(self, v))
-          i = BTree_split((BTree *)v, -1, (BTree *)e);
-      else
-          i = bucket_split((Bucket *)v, -1, (Bucket *)e);
-      PER_ALLOW_DEACTIVATION(v);
+    /* Now split between the original (v) and the new (e) at the midpoint*/
+    if (SameType_Check(self, v))
+      i = BTree_split((BTree *)v, -1, (BTree *)e);
+    else
+      i = bucket_split((Bucket *)v, -1, (Bucket *)e);
+    PER_ALLOW_DEACTIVATION(v);
 
-      if (i < 0) {
-          Py_DECREF(e);
-	  assert(PyErr_Occurred());
-          return -1;
-      }
+    if (i < 0) {
+      Py_DECREF(e);
+      assert(PyErr_Occurred());
+      return -1;
+    }
 
-      index++;
-      d++;
-      if (self->len > index)	/* Shift up the old values one array slot */
-	  memmove(d+1, d, sizeof(BTreeItem)*(self->len-index));
+    index++;
+    d++;
+    if (self->len > index)	/* Shift up the old values one array slot */
+      memmove(d+1, d, sizeof(BTreeItem)*(self->len-index));
 
-      if (SameType_Check(self, v)) {
-          COPY_KEY(d->key, BTREE(e)->data->key);
+    if (SameType_Check(self, v)) {
+      COPY_KEY(d->key, BTREE(e)->data->key);
 
-          /* We take the unused reference from e, so there's no
-             reason to INCREF!
-          */
-          /* INCREF_KEY(self->data[1].key); */
-      }
-      else {
-          COPY_KEY(d->key, BUCKET(e)->keys[0]);
-          INCREF_KEY(d->key);
-      }
-      d->child = e;
-      self->len++;
+      /* We take the unused reference from e, so there's no
+         reason to INCREF!
+      */
+      /* INCREF_KEY(self->data[1].key); */
+    }
+    else {
+      COPY_KEY(d->key, BUCKET(e)->keys[0]);
+      INCREF_KEY(d->key);
+    }
+    d->child = e;
+    self->len++;
 
-      if (self->len >= MAX_BTREE_SIZE(self) * 2)    /* the root is huge */
-	  return BTree_split_root(self, noval);
+    if (self->len >= MAX_BTREE_SIZE(self) * 2)    /* the root is huge */
+      return BTree_split_root(self, noval);
   }
   else {
-      /* The BTree is empty.  Create an empty bucket.  See CAUTION in
-       * the comments preceding.
-       */
-      assert(index == 0);
-      d = self->data;
-      d->child = BTree_newBucket(self);
-      if (d->child == NULL)
-	  return -1;
-      self->len = 1;
-      Py_INCREF(d->child);
-      self->firstbucket = (Bucket *)d->child;
+    /* The BTree is empty.  Create an empty bucket.  See CAUTION in
+     * the comments preceding.
+     */
+    assert(index == 0);
+    d = self->data;
+    d->child = BTree_newBucket(self);
+    if (d->child == NULL)
+      return -1;
+    self->len = 1;
+    Py_INCREF(d->child);
+    self->firstbucket = (Bucket *)d->child;
   }
 
   return 0;
@@ -465,50 +465,50 @@
 static Bucket *
 BTree_lastBucket(BTree *self)
 {
-    Sized *pchild;
-    Bucket *result;
+  Sized *pchild;
+  Bucket *result;
 
-    UNLESS (self->data && self->len) {
-        IndexError(-1); /* is this the best action to take? */
-        return NULL;
-    }
+  UNLESS (self->data && self->len) {
+    IndexError(-1); /* is this the best action to take? */
+    return NULL;
+  }
 
-    pchild = self->data[self->len - 1].child;
-    if (SameType_Check(self, pchild)) {
-        self = BTREE(pchild);
-        PER_USE_OR_RETURN(self, NULL);
-        result = BTree_lastBucket(self);
-        PER_UNUSE(self);
-    }
-    else {
-        Py_INCREF(pchild);
-        result = BUCKET(pchild);
-    }
-    return result;
+  pchild = self->data[self->len - 1].child;
+  if (SameType_Check(self, pchild)) {
+    self = BTREE(pchild);
+    PER_USE_OR_RETURN(self, NULL);
+    result = BTree_lastBucket(self);
+    PER_UNUSE(self);
+  }
+  else {
+    Py_INCREF(pchild);
+    result = BUCKET(pchild);
+  }
+  return result;
 }
 
 static int
 BTree_deleteNextBucket(BTree *self)
 {
-    Bucket *b;
+  Bucket *b;
 
-    UNLESS (PER_USE(self)) return -1;
+  UNLESS (PER_USE(self)) return -1;
 
-    b = BTree_lastBucket(self);
-    if (b == NULL)
-	goto err;
-    if (Bucket_deleteNextBucket(b) < 0)
-	goto err;
+  b = BTree_lastBucket(self);
+  if (b == NULL)
+    goto err;
+  if (Bucket_deleteNextBucket(b) < 0)
+    goto err;
 
-    Py_DECREF(b);
-    PER_UNUSE(self);
+  Py_DECREF(b);
+  PER_UNUSE(self);
 
-    return 0;
+  return 0;
 
  err:
-    Py_XDECREF(b);
-    PER_ALLOW_DEACTIVATION(self);
-    return -1;
+  Py_XDECREF(b);
+  PER_ALLOW_DEACTIVATION(self);
+  return -1;
 }
 
 /*
@@ -536,44 +536,44 @@
 static int
 _BTree_clear(BTree *self)
 {
-    const int len = self->len;
+  const int len = self->len;
 
-    if (self->firstbucket) {
-        /* Obscure:  The first bucket is pointed to at least by
-         * self->firstbucket and data[0].child of whichever BTree node it's
-         * a child of.  However, if persistence is enabled then the latter
-         * BTree node may be a ghost at this point, and so its pointers "don't
-         * count":  we can only rely on self's pointers being intact.
-         */
+  if (self->firstbucket) {
+    /* Obscure:  The first bucket is pointed to at least by
+     * self->firstbucket and data[0].child of whichever BTree node it's
+     * a child of.  However, if persistence is enabled then the latter
+     * BTree node may be a ghost at this point, and so its pointers "don't
+     * count":  we can only rely on self's pointers being intact.
+     */
 #ifdef PERSISTENT
-	ASSERT(self->firstbucket->ob_refcnt > 0,
-	       "Invalid firstbucket pointer", -1);
+    ASSERT(self->firstbucket->ob_refcnt > 0,
+           "Invalid firstbucket pointer", -1);
 #else
-	ASSERT(self->firstbucket->ob_refcnt > 1,
-	       "Invalid firstbucket pointer", -1);
+    ASSERT(self->firstbucket->ob_refcnt > 1,
+           "Invalid firstbucket pointer", -1);
 #endif
-	Py_DECREF(self->firstbucket);
-	self->firstbucket = NULL;
+    Py_DECREF(self->firstbucket);
+    self->firstbucket = NULL;
+  }
+
+  if (self->data) {
+    int i;
+    if (len > 0) { /* 0 is special because key 0 is trash */
+      Py_DECREF(self->data[0].child);
     }
 
-    if (self->data) {
-        int i;
-        if (len > 0) { /* 0 is special because key 0 is trash */
-            Py_DECREF(self->data[0].child);
-	}
-
-        for (i = 1; i < len; i++) {
+    for (i = 1; i < len; i++) {
 #ifdef KEY_TYPE_IS_PYOBJECT
 	    DECREF_KEY(self->data[i].key);
 #endif
-            Py_DECREF(self->data[i].child);
-        }
-	free(self->data);
-	self->data = NULL;
+      Py_DECREF(self->data[i].child);
     }
+    free(self->data);
+    self->data = NULL;
+  }
 
-    self->len = self->size = 0;
-    return 0;
+  self->len = self->size = 0;
+  return 0;
 }
 
 /*
@@ -586,224 +586,224 @@
   is a set).
 
   Return:
-    -1  error
-     0  successful, and number of entries didn't change
-    >0  successful, and number of entries did change
+  -1  error
+  0  successful, and number of entries didn't change
+  >0  successful, and number of entries did change
 
   Internal
-     There are two distinct return values > 0:
+  There are two distinct return values > 0:
 
-     1  Successful, number of entries changed, but firstbucket did not go away.
+  1  Successful, number of entries changed, but firstbucket did not go away.
 
-     2  Successful, number of entries changed, firstbucket did go away.
-        This can only happen on a delete (value == NULL).  The caller may
-        need to change its own firstbucket pointer, and in any case *someone*
-        needs to adjust the 'next' pointer of the bucket immediately preceding
-        the bucket that went away (it needs to point to the bucket immediately
-        following the bucket that went away).
+  2  Successful, number of entries changed, firstbucket did go away.
+  This can only happen on a delete (value == NULL).  The caller may
+  need to change its own firstbucket pointer, and in any case *someone*
+  needs to adjust the 'next' pointer of the bucket immediately preceding
+  the bucket that went away (it needs to point to the bucket immediately
+  following the bucket that went away).
 */
 static int
 _BTree_set(BTree *self, PyObject *keyarg, PyObject *value,
            int unique, int noval)
 {
-    int changed = 0;    /* did I mutate? */
-    int min;            /* index of child I searched */
-    BTreeItem *d;       /* self->data[min] */
-    int childlength;    /* len(self->data[min].child) */
-    int status;         /* our return value; and return value from callee */
-    int self_was_empty; /* was self empty at entry? */
+  int changed = 0;    /* did I mutate? */
+  int min;            /* index of child I searched */
+  BTreeItem *d;       /* self->data[min] */
+  int childlength;    /* len(self->data[min].child) */
+  int status;         /* our return value; and return value from callee */
+  int self_was_empty; /* was self empty at entry? */
 
-    KEY_TYPE key;
-    int copied = 1;
+  KEY_TYPE key;
+  int copied = 1;
 
-    COPY_KEY_FROM_ARG(key, keyarg, copied);
-    if (!copied) return -1;
+  COPY_KEY_FROM_ARG(key, keyarg, copied);
+  if (!copied) return -1;
 
-    PER_USE_OR_RETURN(self, -1);
+  PER_USE_OR_RETURN(self, -1);
 
-    self_was_empty = self->len == 0;
-    if (self_was_empty) {
-        /* We're empty.  Make room. */
-	if (value) {
+  self_was_empty = self->len == 0;
+  if (self_was_empty) {
+    /* We're empty.  Make room. */
+    if (value) {
 	    if (BTree_grow(self, 0, noval) < 0)
-		goto Error;
-	}
-	else {
+        goto Error;
+    }
+    else {
 	    /* Can't delete a key from an empty BTree. */
 	    PyErr_SetObject(PyExc_KeyError, keyarg);
 	    goto Error;
-	}
     }
+  }
 
-    /* Find the right child to search, and hand the work off to it. */
-    BTREE_SEARCH(min, self, key, goto Error);
-    d = self->data + min;
+  /* Find the right child to search, and hand the work off to it. */
+  BTREE_SEARCH(min, self, key, goto Error);
+  d = self->data + min;
 
-    if (SameType_Check(self, d->child))
-	status = _BTree_set(BTREE(d->child), keyarg, value, unique, noval);
-    else {
-        int bucket_changed = 0;
-	status = _bucket_set(BUCKET(d->child), keyarg,
-	                     value, unique, noval, &bucket_changed);
+  if (SameType_Check(self, d->child))
+    status = _BTree_set(BTREE(d->child), keyarg, value, unique, noval);
+  else {
+    int bucket_changed = 0;
+    status = _bucket_set(BUCKET(d->child), keyarg,
+                         value, unique, noval, &bucket_changed);
 #ifdef PERSISTENT
-	/* If a BTree contains only a single bucket, BTree.__getstate__()
-	 * includes the bucket's entire state, and the bucket doesn't get
-	 * an oid of its own.  So if we have a single oid-less bucket that
-	 * changed, it's *our* oid that should be marked as changed -- the
-	 * bucket doesn't have one.
-	 */
-	if (bucket_changed
-	    && self->len == 1
-	    && self->data[0].child->oid == NULL)
-	{
-	    changed = 1;
-	}
+    /* If a BTree contains only a single bucket, BTree.__getstate__()
+     * includes the bucket's entire state, and the bucket doesn't get
+     * an oid of its own.  So if we have a single oid-less bucket that
+     * changed, it's *our* oid that should be marked as changed -- the
+     * bucket doesn't have one.
+     */
+    if (bucket_changed
+        && self->len == 1
+        && self->data[0].child->oid == NULL)
+      {
+        changed = 1;
+      }
 #endif
-    }
-    if (status == 0) goto Done;
-    if (status < 0) goto Error;
-    assert(status == 1 || status == 2);
+  }
+  if (status == 0) goto Done;
+  if (status < 0) goto Error;
+  assert(status == 1 || status == 2);
 
-    /* The child changed size.  Get its new size.  Note that since the tree
-     * rooted at the child changed size, so did the tree rooted at self:
-     * our status must be >= 1 too.
-     */
-    UNLESS(PER_USE(d->child)) goto Error;
-    childlength = d->child->len;
-    PER_UNUSE(d->child);
+  /* The child changed size.  Get its new size.  Note that since the tree
+   * rooted at the child changed size, so did the tree rooted at self:
+   * our status must be >= 1 too.
+   */
+  UNLESS(PER_USE(d->child)) goto Error;
+  childlength = d->child->len;
+  PER_UNUSE(d->child);
 
-    if (value) {
-        /* A bucket got bigger -- if it's "too big", split it. */
-        int toobig;
+  if (value) {
+    /* A bucket got bigger -- if it's "too big", split it. */
+    int toobig;
 
-        assert(status == 1);    /* can be 2 only on deletes */
-        if (SameType_Check(self, d->child))
-            toobig = childlength > MAX_BTREE_SIZE(d->child);
-        else
-            toobig = childlength > MAX_BUCKET_SIZE(d->child);
+    assert(status == 1);    /* can be 2 only on deletes */
+    if (SameType_Check(self, d->child))
+      toobig = childlength > MAX_BTREE_SIZE(d->child);
+    else
+      toobig = childlength > MAX_BUCKET_SIZE(d->child);
 
-        if (toobig) {
-            if (BTree_grow(self, min, noval) < 0) goto Error;
-            changed = 1;        /* BTree_grow mutated self */
-        }
-        goto Done;      /* and status still == 1 */
+    if (toobig) {
+      if (BTree_grow(self, min, noval) < 0) goto Error;
+      changed = 1;        /* BTree_grow mutated self */
     }
+    goto Done;      /* and status still == 1 */
+  }
 
-    /* A bucket got smaller.  This is much harder, and despite that we
-     * don't try to rebalance the tree.
+  /* A bucket got smaller.  This is much harder, and despite that we
+   * don't try to rebalance the tree.
+   */
+  if (status == 2) {  /*  this is the last reference to child status */
+    /* Two problems to solve:  May have to adjust our own firstbucket,
+     * and the bucket that went away needs to get unlinked.
      */
-    if (status == 2) {  /*  this is the last reference to child status */
-        /* Two problems to solve:  May have to adjust our own firstbucket,
-         * and the bucket that went away needs to get unlinked.
-         */
-        if (min) {
-            /* This wasn't our firstbucket, so no need to adjust ours (note
-             * that it can't be the firstbucket of any node above us either).
-             * Tell "the tree to the left" to do the unlinking.
-             */
-            if (BTree_deleteNextBucket(BTREE(d[-1].child)) < 0) goto Error;
-            status = 1;     /* we solved the child's firstbucket problem */
-        }
-        else {
-            /* This was our firstbucket.  Update to new firstbucket value. */
-            Bucket *nextbucket;
-            UNLESS(PER_USE(d->child)) goto Error;
-            nextbucket = BTREE(d->child)->firstbucket;
-            PER_UNUSE(d->child);
+    if (min) {
+      /* This wasn't our firstbucket, so no need to adjust ours (note
+       * that it can't be the firstbucket of any node above us either).
+       * Tell "the tree to the left" to do the unlinking.
+       */
+      if (BTree_deleteNextBucket(BTREE(d[-1].child)) < 0) goto Error;
+      status = 1;     /* we solved the child's firstbucket problem */
+    }
+    else {
+      /* This was our firstbucket.  Update to new firstbucket value. */
+      Bucket *nextbucket;
+      UNLESS(PER_USE(d->child)) goto Error;
+      nextbucket = BTREE(d->child)->firstbucket;
+      PER_UNUSE(d->child);
 
-            Py_XINCREF(nextbucket);
-            Py_DECREF(self->firstbucket);
-            self->firstbucket = nextbucket;
-            changed = 1;
+      Py_XINCREF(nextbucket);
+      Py_DECREF(self->firstbucket);
+      self->firstbucket = nextbucket;
+      changed = 1;
 
-            /* The caller has to do the unlinking -- we can't.  Also, since
-             * it was our firstbucket, it may also be theirs.
-             */
-            assert(status == 2);
-        }
+      /* The caller has to do the unlinking -- we can't.  Also, since
+       * it was our firstbucket, it may also be theirs.
+       */
+      assert(status == 2);
     }
+  }
 
-    /* If the child isn't empty, we're done!  We did all that was possible for
-     * us to do with the firstbucket problems the child gave us, and since the
-     * child isn't empty don't create any new firstbucket problems of our own.
-     */
-    if (childlength) goto Done;
+  /* If the child isn't empty, we're done!  We did all that was possible for
+   * us to do with the firstbucket problems the child gave us, and since the
+   * child isn't empty don't create any new firstbucket problems of our own.
+   */
+  if (childlength) goto Done;
 
-    /* The child became empty:  we need to remove it from self->data.
-     * But first, if we're a bottom-level node, we've got more bucket-fiddling
-     * to set up.
-     */
-    if (!SameType_Check(self, d->child)) {
-        /* We're about to delete a bucket. */
-        if (min) {
-            /* It's not our first bucket, so we can tell the previous
-             * bucket to adjust its reference to it.  It can't be anyone
-             * else's first bucket either, so the caller needn't do anything.
-             */
-            if (Bucket_deleteNextBucket(BUCKET(d[-1].child)) < 0) goto Error;
-            /* status should be 1, and already is:  if it were 2, the
-             * block above would have set it to 1 in its min != 0 branch.
-             */
-            assert(status == 1);
-        }
-        else {
-            Bucket *nextbucket;
-            /* It's our first bucket.  We can't unlink it directly. */
-            /* 'changed' will be set true by the deletion code following. */
-            UNLESS(PER_USE(d->child)) goto Error;
-            nextbucket = BUCKET(d->child)->next;
-            PER_UNUSE(d->child);
+  /* The child became empty:  we need to remove it from self->data.
+   * But first, if we're a bottom-level node, we've got more bucket-fiddling
+   * to set up.
+   */
+  if (!SameType_Check(self, d->child)) {
+    /* We're about to delete a bucket. */
+    if (min) {
+      /* It's not our first bucket, so we can tell the previous
+       * bucket to adjust its reference to it.  It can't be anyone
+       * else's first bucket either, so the caller needn't do anything.
+       */
+      if (Bucket_deleteNextBucket(BUCKET(d[-1].child)) < 0) goto Error;
+      /* status should be 1, and already is:  if it were 2, the
+       * block above would have set it to 1 in its min != 0 branch.
+       */
+      assert(status == 1);
+    }
+    else {
+      Bucket *nextbucket;
+      /* It's our first bucket.  We can't unlink it directly. */
+      /* 'changed' will be set true by the deletion code following. */
+      UNLESS(PER_USE(d->child)) goto Error;
+      nextbucket = BUCKET(d->child)->next;
+      PER_UNUSE(d->child);
 
-            Py_XINCREF(nextbucket);
-            Py_DECREF(self->firstbucket);
-            self->firstbucket = nextbucket;
+      Py_XINCREF(nextbucket);
+      Py_DECREF(self->firstbucket);
+      self->firstbucket = nextbucket;
 
-            status = 2; /* we're giving our caller a new firstbucket problem */
-         }
+      status = 2; /* we're giving our caller a new firstbucket problem */
     }
+  }
 
-    /* Remove the child from self->data. */
-    Py_DECREF(d->child);
+  /* Remove the child from self->data. */
+  Py_DECREF(d->child);
 #ifdef KEY_TYPE_IS_PYOBJECT
-    if (min) {
-        DECREF_KEY(d->key);
-    }
-    else if (self->len > 1) {
-	/* We're deleting the first child of a BTree with more than one
-	 * child.  The key at d+1 is about to be shifted into slot 0,
-	 * and hence never to be referenced again (the key in slot 0 is
-	 * trash).
-	 */
-	DECREF_KEY((d+1)->key);
-    }
-    /* Else min==0 and len==1:  we're emptying the BTree entirely, and
-     * there is no key in need of decrefing.
+  if (min) {
+    DECREF_KEY(d->key);
+  }
+  else if (self->len > 1) {
+    /* We're deleting the first child of a BTree with more than one
+     * child.  The key at d+1 is about to be shifted into slot 0,
+     * and hence never to be referenced again (the key in slot 0 is
+     * trash).
      */
+    DECREF_KEY((d+1)->key);
+  }
+  /* Else min==0 and len==1:  we're emptying the BTree entirely, and
+   * there is no key in need of decrefing.
+   */
 #endif
-    --self->len;
-    if (min < self->len)
-        memmove(d, d+1, (self->len - min) * sizeof(BTreeItem));
-    changed = 1;
+  --self->len;
+  if (min < self->len)
+    memmove(d, d+1, (self->len - min) * sizeof(BTreeItem));
+  changed = 1;
 
-Done:
+ Done:
 #ifdef PERSISTENT
-    if (changed) {
-        if (PER_CHANGED(self) < 0) goto Error;
-    }
+  if (changed) {
+    if (PER_CHANGED(self) < 0) goto Error;
+  }
 #endif
-    PER_UNUSE(self);
-    return status;
+  PER_UNUSE(self);
+  return status;
 
-Error:
-    assert(PyErr_Occurred());
-    if (self_was_empty) {
-        /* BTree_grow may have left the BTree in an invalid state.  Make
-         * sure the tree is a legitimate empty tree.
-         */
-        _BTree_clear(self);
-    }
-    PER_UNUSE(self);
-    return -1;
+ Error:
+  assert(PyErr_Occurred());
+  if (self_was_empty) {
+    /* BTree_grow may have left the BTree in an invalid state.  Make
+     * sure the tree is a legitimate empty tree.
+     */
+    _BTree_clear(self);
+  }
+  PER_UNUSE(self);
+  return -1;
 }
 
 /*
@@ -821,52 +821,52 @@
 static int
 BTree_setitem(BTree *self, PyObject *key, PyObject *v)
 {
-    if (_BTree_set(self, key, v, 0, 0) < 0)
-	return -1;
-    return 0;
+  if (_BTree_set(self, key, v, 0, 0) < 0)
+    return -1;
+  return 0;
 }
 
 #ifdef PERSISTENT
 static PyObject *
 BTree__p_deactivate(BTree *self, PyObject *args, PyObject *keywords)
 {
-    int ghostify = 1;
-    PyObject *force = NULL;
+  int ghostify = 1;
+  PyObject *force = NULL;
 
-    if (args && PyTuple_GET_SIZE(args) > 0) {
-	PyErr_SetString(PyExc_TypeError,
-			"_p_deactivate takes not positional arguments");
-	return NULL;
-    }
-    if (keywords) {
-	int size = PyDict_Size(keywords);
-	force = PyDict_GetItemString(keywords, "force");
-	if (force)
+  if (args && PyTuple_GET_SIZE(args) > 0) {
+    PyErr_SetString(PyExc_TypeError,
+                    "_p_deactivate takes not positional arguments");
+    return NULL;
+  }
+  if (keywords) {
+    int size = PyDict_Size(keywords);
+    force = PyDict_GetItemString(keywords, "force");
+    if (force)
 	    size--;
-	if (size) {
+    if (size) {
 	    PyErr_SetString(PyExc_TypeError,
-			    "_p_deactivate only accepts keyword arg force");
+                      "_p_deactivate only accepts keyword arg force");
 	    return NULL;
-	}
     }
+  }
 
-    if (self->jar && self->oid) {
-	ghostify = self->state == cPersistent_UPTODATE_STATE;
-	if (!ghostify && force) {
+  if (self->jar && self->oid) {
+    ghostify = self->state == cPersistent_UPTODATE_STATE;
+    if (!ghostify && force) {
 	    if (PyObject_IsTrue(force))
-		ghostify = 1;
+        ghostify = 1;
 	    if (PyErr_Occurred())
-		return NULL;
-	}
-	if (ghostify) {
+        return NULL;
+    }
+    if (ghostify) {
 	    if (_BTree_clear(self) < 0)
-		return NULL;
+        return NULL;
 	    PER_GHOSTIFY(self);
-	}
     }
+  }
 
-    Py_INCREF(Py_None);
-    return Py_None;
+  Py_INCREF(Py_None);
+  return Py_None;
 }
 #endif
 
@@ -878,9 +878,9 @@
   if (self->len)
     {
       if (_BTree_clear(self) < 0)
-	  goto err;
+        goto err;
       if (PER_CHANGED(self) < 0)
-	  goto err;
+        goto err;
     }
 
   PER_UNUSE(self);
@@ -888,7 +888,7 @@
   Py_INCREF(Py_None);
   return Py_None;
 
-err:
+ err:
   PER_UNUSE(self);
   return NULL;
 }
@@ -923,170 +923,170 @@
 static PyObject *
 BTree_getstate(BTree *self)
 {
-    PyObject *r = NULL;
-    PyObject *o;
-    int i, l;
+  PyObject *r = NULL;
+  PyObject *o;
+  int i, l;
 
-    UNLESS (PER_USE(self)) return NULL;
+  UNLESS (PER_USE(self)) return NULL;
 
-    if (self->len) {
-	r = PyTuple_New(self->len * 2 - 1);
-	if (r == NULL)
+  if (self->len) {
+    r = PyTuple_New(self->len * 2 - 1);
+    if (r == NULL)
 	    goto err;
 
-	if (self->len == 1
-	    && self->data->child->ob_type != self->ob_type
+    if (self->len == 1
+        && self->data->child->ob_type != self->ob_type
 #ifdef PERSISTENT
-	    && BUCKET(self->data->child)->oid == NULL
+        && BUCKET(self->data->child)->oid == NULL
 #endif
-	    ) {
+        ) {
 	    /* We have just one bucket. Save its data directly. */
 	    o = bucket_getstate((Bucket *)self->data->child);
 	    if (o == NULL)
-		goto err;
+        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) {
+          COPY_KEY_TO_OBJECT(o, self->data[i].key);
+          PyTuple_SET_ITEM(r, l, o);
+          l++;
         }
-        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);
-		    l++;
-                }
-		o = (PyObject *)self->data[i].child;
-		Py_INCREF(o);
-		PyTuple_SET_ITEM(r,l,o);
-		l++;
-            }
+        o = (PyObject *)self->data[i].child;
+        Py_INCREF(o);
+        PyTuple_SET_ITEM(r,l,o);
+        l++;
+      }
 	    ASSIGN(r, Py_BuildValue("OO", r, self->firstbucket));
-        }
-
     }
-    else {
-	r = Py_None;
-	Py_INCREF(r);
-    }
 
-    PER_UNUSE(self);
+  }
+  else {
+    r = Py_None;
+    Py_INCREF(r);
+  }
 
-    return r;
+  PER_UNUSE(self);
 
+  return r;
+
  err:
-    PER_UNUSE(self);
-    Py_XDECREF(r);
-    return NULL;
+  PER_UNUSE(self);
+  Py_XDECREF(r);
+  return NULL;
 }
 
 static int
 _BTree_setstate(BTree *self, PyObject *state, int noval)
 {
-    PyObject *items, *firstbucket = NULL;
-    BTreeItem *d;
-    int len, l, i, copied=1;
+  PyObject *items, *firstbucket = NULL;
+  BTreeItem *d;
+  int len, l, i, copied=1;
 
-    if (_BTree_clear(self) < 0)
-	return -1;
+  if (_BTree_clear(self) < 0)
+    return -1;
 
-    /* The state of a BTree can be one of the following:
-       None -- an empty BTree
-       A one-tuple -- a single bucket btree
-       A two-tuple -- a BTree with more than one bucket
-       See comments for BTree_getstate() for the details.
-    */
+  /* The state of a BTree can be one of the following:
+     None -- an empty BTree
+     A one-tuple -- a single bucket btree
+     A two-tuple -- a BTree with more than one bucket
+     See comments for BTree_getstate() for the details.
+  */
 
-    if (state == Py_None)
-	return 0;
+  if (state == Py_None)
+    return 0;
 
-    if (!PyArg_ParseTuple(state, "O|O:__setstate__", &items, &firstbucket))
-	return -1;
+  if (!PyArg_ParseTuple(state, "O|O:__setstate__", &items, &firstbucket))
+    return -1;
 
-    if (!PyTuple_Check(items)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "tuple required for first state element");
-	return -1;
-    }
+  if (!PyTuple_Check(items)) {
+    PyErr_SetString(PyExc_TypeError,
+                    "tuple required for first state element");
+    return -1;
+  }
 
-    len = PyTuple_Size(items);
-    if (len < 0)
-	return -1;
-    len = (len + 1) / 2;
+  len = PyTuple_Size(items);
+  if (len < 0)
+    return -1;
+  len = (len + 1) / 2;
 
-    assert(len > 0); /* If the BTree is empty, it's state is None. */
-    assert(self->size == 0); /* We called _BTree_clear(). */
+  assert(len > 0); /* If the BTree is empty, it's state is None. */
+  assert(self->size == 0); /* We called _BTree_clear(). */
 
-    self->data = BTree_Malloc(sizeof(BTreeItem) * len);
-    if (self->data == NULL)
-	return -1;
-    self->size = len;
+  self->data = BTree_Malloc(sizeof(BTreeItem) * len);
+  if (self->data == NULL)
+    return -1;
+  self->size = len;
 
-    for (i = 0, d = self->data, l = 0; i < len; i++, d++) {
-	PyObject *v;
-	if (i) { /* skip the first key slot */
+  for (i = 0, d = self->data, l = 0; i < len; i++, d++) {
+    PyObject *v;
+    if (i) { /* skip the first key slot */
 	    COPY_KEY_FROM_ARG(d->key, PyTuple_GET_ITEM(items, l), copied);
 	    l++;
 	    if (!copied)
-		return -1;
+        return -1;
 	    INCREF_KEY(d->key);
-	}
-	v = PyTuple_GET_ITEM(items, l);
-	if (PyTuple_Check(v)) {
+    }
+    v = PyTuple_GET_ITEM(items, l);
+    if (PyTuple_Check(v)) {
 	    /* Handle the special case in __getstate__() for a BTree
 	       with a single bucket. */
 	    d->child = BTree_newBucket(self);
 	    if (!d->child)
-		return -1;
+        return -1;
 	    if (noval) {
-		if (_set_setstate(BUCKET(d->child), v) < 0)
-		    return -1;
+        if (_set_setstate(BUCKET(d->child), v) < 0)
+          return -1;
 	    }
 	    else {
-		if (_bucket_setstate(BUCKET(d->child), v) < 0)
-		    return -1;
+        if (_bucket_setstate(BUCKET(d->child), v) < 0)
+          return -1;
 	    }
-	}
-	else {
+    }
+    else {
 	    d->child = (Sized *)v;
 	    Py_INCREF(v);
-	}
-	l++;
     }
+    l++;
+  }
 
-    if (!firstbucket)
-	firstbucket = (PyObject *)self->data->child;
+  if (!firstbucket)
+    firstbucket = (PyObject *)self->data->child;
 
-    if (!PyObject_IsInstance(firstbucket, (PyObject *)
-			     (noval ? &SetType : &BucketType))) {
-	PyErr_SetString(PyExc_TypeError,
-			"No firstbucket in non-empty BTree");
-	return -1;
-    }
-    self->firstbucket = BUCKET(firstbucket);
-    Py_INCREF(firstbucket);
+  if (!PyObject_IsInstance(firstbucket, (PyObject *)
+                           (noval ? &SetType : &BucketType))) {
+    PyErr_SetString(PyExc_TypeError,
+                    "No firstbucket in non-empty BTree");
+    return -1;
+  }
+  self->firstbucket = BUCKET(firstbucket);
+  Py_INCREF(firstbucket);
 #ifndef PERSISTENT
-    /* firstbucket is also the child of some BTree node, but that node may
-     * be a ghost if persistence is enabled.
-     */
-    assert(self->firstbucket->ob_refcnt > 1);
+  /* firstbucket is also the child of some BTree node, but that node may
+   * be a ghost if persistence is enabled.
+   */
+  assert(self->firstbucket->ob_refcnt > 1);
 #endif
-    self->len = len;
+  self->len = len;
 
-    return 0;
+  return 0;
 }
 
 static PyObject *
 BTree_setstate(BTree *self, PyObject *arg)
 {
-    int r;
+  int r;
 
-    PER_PREVENT_DEACTIVATION(self);
-    r = _BTree_setstate(self, arg, 0);
-    PER_UNUSE(self);
+  PER_PREVENT_DEACTIVATION(self);
+  r = _BTree_setstate(self, arg, 0);
+  PER_UNUSE(self);
 
-    if (r < 0)
-	return NULL;
-    Py_INCREF(Py_None);
-    return Py_None;
+  if (r < 0)
+    return NULL;
+  Py_INCREF(Py_None);
+  return Py_None;
 }
 
 #ifdef PERSISTENT
@@ -1114,7 +1114,7 @@
 		return Py_None;		/* an empty BTree */
 	if (! PyTuple_Check(t)) {
 		PyErr_SetString(PyExc_TypeError,
-			"_p_resolveConflict: expected tuple or None for state");
+                    "_p_resolveConflict: expected tuple or None for state");
 		return NULL;
 	}
 
@@ -1127,22 +1127,22 @@
 
 	if (PyTuple_GET_SIZE(t) != 1) {
 		PyErr_SetString(PyExc_TypeError,
-			"_p_resolveConflict: expected 1- or 2-tuple for state");
+                    "_p_resolveConflict: expected 1- or 2-tuple for state");
 		return NULL;
 	}
 
 	t = PyTuple_GET_ITEM(t, 0);
 	if (! PyTuple_Check(t) || PyTuple_GET_SIZE(t) != 1) {
 		PyErr_SetString(PyExc_TypeError,
-			"_p_resolveConflict: expected 1-tuple containing "
-			"bucket state");
+                    "_p_resolveConflict: expected 1-tuple containing "
+                    "bucket state");
 		return NULL;
 	}
 
 	t = PyTuple_GET_ITEM(t, 0);
 	if (! PyTuple_Check(t)) {
 		PyErr_SetString(PyExc_TypeError,
-			"_p_resolveConflict: expected tuple for bucket state");
+                    "_p_resolveConflict: expected tuple for bucket state");
 		return NULL;
 	}
 
@@ -1157,188 +1157,188 @@
 static PyObject *
 BTree__p_resolveConflict(BTree *self, PyObject *args)
 {
-    PyObject *s[3];
-    PyObject *x, *y, *z;
+  PyObject *s[3];
+  PyObject *x, *y, *z;
 
-    if (!PyArg_ParseTuple(args, "OOO", &x, &y, &z))
-	return NULL;
+  if (!PyArg_ParseTuple(args, "OOO", &x, &y, &z))
+    return NULL;
 
-    s[0] = get_bucket_state(x);
-    if (s[0] == NULL)
-	return NULL;
-    s[1] = get_bucket_state(y);
-    if (s[1] == NULL)
-	return NULL;
-    s[2] = get_bucket_state(z);
-    if (s[2] == NULL)
-	return NULL;
+  s[0] = get_bucket_state(x);
+  if (s[0] == NULL)
+    return NULL;
+  s[1] = get_bucket_state(y);
+  if (s[1] == NULL)
+    return NULL;
+  s[2] = get_bucket_state(z);
+  if (s[2] == NULL)
+    return NULL;
 
-    if (PyObject_IsInstance((PyObject *)self, (PyObject *)&BTreeType))
-	x = _bucket__p_resolveConflict(OBJECT(&BucketType), s);
-    else
-	x = _bucket__p_resolveConflict(OBJECT(&SetType), s);
+  if (PyObject_IsInstance((PyObject *)self, (PyObject *)&BTreeType))
+    x = _bucket__p_resolveConflict(OBJECT(&BucketType), s);
+  else
+    x = _bucket__p_resolveConflict(OBJECT(&SetType), s);
 
-    if (x == NULL)
-	return NULL;
+  if (x == NULL)
+    return NULL;
 
-    return Py_BuildValue("((N))", x);
+  return Py_BuildValue("((N))", x);
 }
 #endif
 
 /*
- BTree_findRangeEnd -- Find one end, expressed as a bucket and
- position, for a range search.
+  BTree_findRangeEnd -- Find one end, expressed as a bucket and
+  position, for a range search.
 
- If low, return bucket and index of the smallest item >= key,
- otherwise return bucket and index of the largest item <= key.
+  If low, return bucket and index of the smallest item >= key,
+  otherwise return bucket and index of the largest item <= key.
 
- If exclude_equal, exact matches aren't acceptable; if one is found,
- move right if low, or left if !low (this is for range searches exclusive
- of an endpoint).
+  If exclude_equal, exact matches aren't acceptable; if one is found,
+  move right if low, or left if !low (this is for range searches exclusive
+  of an endpoint).
 
- Return:
-    -1      Error; offset and bucket unchanged
-     0      Not found; offset and bucket unchanged
-     1      Correct bucket and offset stored; the caller owns a new reference
-            to the bucket.
+  Return:
+  -1      Error; offset and bucket unchanged
+  0      Not found; offset and bucket unchanged
+  1      Correct bucket and offset stored; the caller owns a new reference
+  to the bucket.
 
- Internal:
-    We do binary searches in BTree nodes downward, at each step following
-    C(i) where K(i) <= key < K(i+1).  As always, K(i) <= C(i) < K(i+1) too.
-    (See Maintainer.txt for the meaning of that notation.)  That eventually
-    leads to a bucket where we do Bucket_findRangeEnd.  That usually works,
-    but there are two cases where it can fail to find the correct answer:
+  Internal:
+  We do binary searches in BTree nodes downward, at each step following
+  C(i) where K(i) <= key < K(i+1).  As always, K(i) <= C(i) < K(i+1) too.
+  (See Maintainer.txt for the meaning of that notation.)  That eventually
+  leads to a bucket where we do Bucket_findRangeEnd.  That usually works,
+  but there are two cases where it can fail to find the correct answer:
 
-    1. On a low search, we find a bucket with keys >= K(i), but that doesn't
-       imply there are keys in the bucket >= key.  For example, suppose
-       a bucket has keys in 1..100, its successor's keys are in 200..300, and
-       we're doing a low search on 150.  We'll end up in the first bucket,
-       but there are no keys >= 150 in it.  K(i+1) > key, though, and all
-       the keys in C(i+1) >= K(i+1) > key, so the first key in the next
-       bucket (if any) is the correct result.  This is easy to find by
-       following the bucket 'next' pointer.
+  1. On a low search, we find a bucket with keys >= K(i), but that doesn't
+  imply there are keys in the bucket >= key.  For example, suppose
+  a bucket has keys in 1..100, its successor's keys are in 200..300, and
+  we're doing a low search on 150.  We'll end up in the first bucket,
+  but there are no keys >= 150 in it.  K(i+1) > key, though, and all
+  the keys in C(i+1) >= K(i+1) > key, so the first key in the next
+  bucket (if any) is the correct result.  This is easy to find by
+  following the bucket 'next' pointer.
 
-    2. On a high search, again that the keys in the bucket are >= K(i)
-       doesn't imply that any key in the bucket is <= key, but it's harder
-       for this to fail (and an earlier version of this routine didn't
-       catch it):  if K(i) itself is in the bucket, it works (then
-       K(i) <= key is *a* key in the bucket that's in the desired range).
-       But when keys get deleted from buckets, they aren't also deleted from
-       BTree nodes, so there's no guarantee that K(i) is in the bucket.
-       For example, delete the smallest key S from some bucket, and S
-       remains in the interior BTree nodes.  Do a high search for S, and
-       the BTree nodes direct the search to the bucket S used to be in,
-       but all keys remaining in that bucket are > S.  The largest key in
-       the *preceding* bucket (if any) is < K(i), though, and K(i) <= key,
-       so the largest key in the preceding bucket is < key and so is the
-       proper result.
+  2. On a high search, again that the keys in the bucket are >= K(i)
+  doesn't imply that any key in the bucket is <= key, but it's harder
+  for this to fail (and an earlier version of this routine didn't
+  catch it):  if K(i) itself is in the bucket, it works (then
+  K(i) <= key is *a* key in the bucket that's in the desired range).
+  But when keys get deleted from buckets, they aren't also deleted from
+  BTree nodes, so there's no guarantee that K(i) is in the bucket.
+  For example, delete the smallest key S from some bucket, and S
+  remains in the interior BTree nodes.  Do a high search for S, and
+  the BTree nodes direct the search to the bucket S used to be in,
+  but all keys remaining in that bucket are > S.  The largest key in
+  the *preceding* bucket (if any) is < K(i), though, and K(i) <= key,
+  so the largest key in the preceding bucket is < key and so is the
+  proper result.
 
-       This is harder to get at efficiently, as buckets are linked only in
-       the increasing direction.  While we're searching downward,
-       deepest_smaller is set to the  node deepest in the tree where
-       we *could* have gone to the left of C(i).  The rightmost bucket in
-       deepest_smaller's subtree is the bucket preceding the bucket we find
-       at first.  This is clumsy to get at, but efficient.
+  This is harder to get at efficiently, as buckets are linked only in
+  the increasing direction.  While we're searching downward,
+  deepest_smaller is set to the  node deepest in the tree where
+  we *could* have gone to the left of C(i).  The rightmost bucket in
+  deepest_smaller's subtree is the bucket preceding the bucket we find
+  at first.  This is clumsy to get at, but efficient.
 */
 static int
 BTree_findRangeEnd(BTree *self, PyObject *keyarg, int low, int exclude_equal,
                    Bucket **bucket, int *offset) {
-    Sized *deepest_smaller = NULL;      /* last possibility to move left */
-    int deepest_smaller_is_btree = 0;   /* Boolean; if false, it's a bucket */
-    Bucket *pbucket;
-    int self_got_rebound = 0;   /* Boolean; when true, deactivate self */
-    int result = -1;            /* Until proven innocent */
-    int i;
-    KEY_TYPE key;
-    int copied = 1;
+  Sized *deepest_smaller = NULL;      /* last possibility to move left */
+  int deepest_smaller_is_btree = 0;   /* Boolean; if false, it's a bucket */
+  Bucket *pbucket;
+  int self_got_rebound = 0;   /* Boolean; when true, deactivate self */
+  int result = -1;            /* Until proven innocent */
+  int i;
+  KEY_TYPE key;
+  int copied = 1;
 
-    COPY_KEY_FROM_ARG(key, keyarg, copied);
-    UNLESS (copied) return -1;
+  COPY_KEY_FROM_ARG(key, keyarg, copied);
+  UNLESS (copied) return -1;
 
-    /* We don't need to: PER_USE_OR_RETURN(self, -1);
-       because the caller does. */
-    UNLESS (self->data && self->len) return 0;
+  /* We don't need to: PER_USE_OR_RETURN(self, -1);
+     because the caller does. */
+  UNLESS (self->data && self->len) return 0;
 
-    /* Search downward until hitting a bucket, stored in pbucket. */
-    for (;;) {
-        Sized *pchild;
-        int pchild_is_btree;
+  /* Search downward until hitting a bucket, stored in pbucket. */
+  for (;;) {
+    Sized *pchild;
+    int pchild_is_btree;
 
-        BTREE_SEARCH(i, self, key, goto Done);
-        pchild = self->data[i].child;
-        pchild_is_btree = SameType_Check(self, pchild);
-        if (i) {
-            deepest_smaller = self->data[i-1].child;
-            deepest_smaller_is_btree = pchild_is_btree;
-        }
-
-        if (pchild_is_btree) {
-            if (self_got_rebound) {
-                PER_UNUSE(self);
-            }
-            self = BTREE(pchild);
-            self_got_rebound = 1;
-            PER_USE_OR_RETURN(self, -1);
-        }
-        else {
-            pbucket = BUCKET(pchild);
-            break;
-        }
+    BTREE_SEARCH(i, self, key, goto Done);
+    pchild = self->data[i].child;
+    pchild_is_btree = SameType_Check(self, pchild);
+    if (i) {
+      deepest_smaller = self->data[i-1].child;
+      deepest_smaller_is_btree = pchild_is_btree;
     }
 
-    /* Search the bucket for a suitable key. */
-    i = Bucket_findRangeEnd(pbucket, keyarg, low, exclude_equal, offset);
-    if (i < 0)
-        goto Done;
-    if (i > 0) {
-        Py_INCREF(pbucket);
-        *bucket = pbucket;
-        result = 1;
-        goto Done;
+    if (pchild_is_btree) {
+      if (self_got_rebound) {
+        PER_UNUSE(self);
+      }
+      self = BTREE(pchild);
+      self_got_rebound = 1;
+      PER_USE_OR_RETURN(self, -1);
     }
-    /* This may be one of the two difficult cases detailed in the comments. */
-    if (low) {
-        Bucket *next;
+    else {
+      pbucket = BUCKET(pchild);
+      break;
+    }
+  }
 
-        UNLESS(PER_USE(pbucket)) goto Done;
-        next = pbucket->next;
-        if (next) {
-                result = 1;
-                Py_INCREF(next);
-                *bucket = next;
-                *offset = 0;
-        }
-        else
-                result = 0;
-        PER_UNUSE(pbucket);
+  /* Search the bucket for a suitable key. */
+  i = Bucket_findRangeEnd(pbucket, keyarg, low, exclude_equal, offset);
+  if (i < 0)
+    goto Done;
+  if (i > 0) {
+    Py_INCREF(pbucket);
+    *bucket = pbucket;
+    result = 1;
+    goto Done;
+  }
+  /* This may be one of the two difficult cases detailed in the comments. */
+  if (low) {
+    Bucket *next;
+
+    UNLESS(PER_USE(pbucket)) goto Done;
+    next = pbucket->next;
+    if (next) {
+      result = 1;
+      Py_INCREF(next);
+      *bucket = next;
+      *offset = 0;
     }
-    /* High-end search:  if it's possible to go left, do so. */
-    else if (deepest_smaller) {
-        if (deepest_smaller_is_btree) {
-            UNLESS(PER_USE(deepest_smaller)) goto Done;
-            /* We own the reference this returns. */
-            pbucket = BTree_lastBucket(BTREE(deepest_smaller));
-            PER_UNUSE(deepest_smaller);
-            if (pbucket == NULL) goto Done;   /* error */
-        }
-        else {
-            pbucket = BUCKET(deepest_smaller);
-            Py_INCREF(pbucket);
-        }
-        UNLESS(PER_USE(pbucket)) goto Done;
-        result = 1;
-        *bucket = pbucket;  /* transfer ownership to caller */
-        *offset = pbucket->len - 1;
-        PER_UNUSE(pbucket);
+    else
+      result = 0;
+    PER_UNUSE(pbucket);
+  }
+  /* High-end search:  if it's possible to go left, do so. */
+  else if (deepest_smaller) {
+    if (deepest_smaller_is_btree) {
+      UNLESS(PER_USE(deepest_smaller)) goto Done;
+      /* We own the reference this returns. */
+      pbucket = BTree_lastBucket(BTREE(deepest_smaller));
+      PER_UNUSE(deepest_smaller);
+      if (pbucket == NULL) goto Done;   /* error */
     }
-    else
-        result = 0;     /* simply not found */
+    else {
+      pbucket = BUCKET(deepest_smaller);
+      Py_INCREF(pbucket);
+    }
+    UNLESS(PER_USE(pbucket)) goto Done;
+    result = 1;
+    *bucket = pbucket;  /* transfer ownership to caller */
+    *offset = pbucket->len - 1;
+    PER_UNUSE(pbucket);
+  }
+  else
+    result = 0;     /* simply not found */
 
-Done:
-    if (self_got_rebound) {
-        PER_UNUSE(self);
-    }
-    return result;
+ Done:
+  if (self_got_rebound) {
+    PER_UNUSE(self);
+  }
+  return result;
 }
 
 static PyObject *
@@ -1391,7 +1391,7 @@
         }
       assert(bucket->len);
       offset = bucket->len - 1;
-     }
+    }
 
   COPY_KEY_TO_OBJECT(key, bucket->keys[offset]);
   PER_UNUSE(bucket);
@@ -1401,8 +1401,8 @@
 
  empty:
   PyErr_SetString(PyExc_ValueError,
-  		  empty_tree ? "empty tree" :
-			       "no key satisfies the conditions");
+                  empty_tree ? "empty tree" :
+                  "no key satisfies the conditions");
  err:
   PER_UNUSE(self);
   if (bucket)
@@ -1435,82 +1435,82 @@
 static PyObject *
 BTree_rangeSearch(BTree *self, PyObject *args, PyObject *kw, char type)
 {
-    PyObject *min = Py_None;
-    PyObject *max = Py_None;
-    int excludemin = 0;
-    int excludemax = 0;
-    int rc;
-    Bucket *lowbucket = NULL;
-    Bucket *highbucket = NULL;
-    int lowoffset;
-    int highoffset;
-    PyObject *result;
+  PyObject *min = Py_None;
+  PyObject *max = Py_None;
+  int excludemin = 0;
+  int excludemax = 0;
+  int rc;
+  Bucket *lowbucket = NULL;
+  Bucket *highbucket = NULL;
+  int lowoffset;
+  int highoffset;
+  PyObject *result;
 
-    if (args) {
-        if (! PyArg_ParseTupleAndKeywords(args, kw, "|OOii", search_keywords,
-  					  &min,
-  					  &max,
-  					  &excludemin,
-  					  &excludemax))
+  if (args) {
+    if (! PyArg_ParseTupleAndKeywords(args, kw, "|OOii", search_keywords,
+                                      &min,
+                                      &max,
+                                      &excludemin,
+                                      &excludemax))
 	    return NULL;
-    }
+  }
 
-    UNLESS (PER_USE(self)) return NULL;
+  UNLESS (PER_USE(self)) return NULL;
 
-    UNLESS (self->data && self->len) goto empty;
+  UNLESS (self->data && self->len) goto empty;
 
-    /* Find the low range */
-    if (min != Py_None) {
-        if ((rc = BTree_findRangeEnd(self, min, 1, excludemin,
-        			      &lowbucket, &lowoffset)) <= 0) {
-            if (rc < 0) goto err;
-            goto empty;
-        }
+  /* Find the low range */
+  if (min != Py_None) {
+    if ((rc = BTree_findRangeEnd(self, min, 1, excludemin,
+                                 &lowbucket, &lowoffset)) <= 0) {
+      if (rc < 0) goto err;
+      goto empty;
     }
-    else {
-        lowbucket = self->firstbucket;
-        lowoffset = 0;
-        if (excludemin) {
-            int bucketlen;
-            UNLESS (PER_USE(lowbucket)) goto err;
-            bucketlen = lowbucket->len;
-            PER_UNUSE(lowbucket);
-            if (bucketlen > 1)
-            	lowoffset = 1;
+  }
+  else {
+    lowbucket = self->firstbucket;
+    lowoffset = 0;
+    if (excludemin) {
+      int bucketlen;
+      UNLESS (PER_USE(lowbucket)) goto err;
+      bucketlen = lowbucket->len;
+      PER_UNUSE(lowbucket);
+      if (bucketlen > 1)
+        lowoffset = 1;
 	    else if (self->len < 2)
 	    	goto empty;
-            else {	/* move to first item in next bucket */
-                Bucket *next;
-                UNLESS (PER_USE(lowbucket)) goto err;
-                next = lowbucket->next;
-                PER_UNUSE(lowbucket);
-                assert(next != NULL);
-                lowbucket = next;
-                /* and lowoffset is still 0 */
-                assert(lowoffset == 0);
-            }
-	}
-        Py_INCREF(lowbucket);
+      else {	/* move to first item in next bucket */
+        Bucket *next;
+        UNLESS (PER_USE(lowbucket)) goto err;
+        next = lowbucket->next;
+        PER_UNUSE(lowbucket);
+        assert(next != NULL);
+        lowbucket = next;
+        /* and lowoffset is still 0 */
+        assert(lowoffset == 0);
+      }
     }
+    Py_INCREF(lowbucket);
+  }
 
-    /* Find the high range */
-    if (max != Py_None) {
-        if ((rc = BTree_findRangeEnd(self, max, 0, excludemax,
-        			      &highbucket, &highoffset)) <= 0) {
-            Py_DECREF(lowbucket);
-            if (rc < 0) goto err;
-            goto empty;
-        }
+  /* Find the high range */
+  if (max != Py_None) {
+    if ((rc = BTree_findRangeEnd(self, max, 0, excludemax,
+                                 &highbucket, &highoffset)) <= 0) {
+      Py_DECREF(lowbucket);
+      if (rc < 0) goto err;
+      goto empty;
     }
-    else {
-    	int bucketlen;
-        highbucket = BTree_lastBucket(self);
-        assert(highbucket != NULL);  /* we know self isn't empty */
-        UNLESS (PER_USE(highbucket)) goto err_and_decref_buckets;
-        bucketlen = highbucket->len;
-    	PER_UNUSE(highbucket);
-        highoffset = bucketlen - 1;
-        if (excludemax) {
+  }
+  else {
+    int bucketlen;
+    highbucket = BTree_lastBucket(self);
+    assert(highbucket != NULL);  /* we know self isn't empty */
+    UNLESS (PER_USE(highbucket)) goto err_and_decref_buckets;
+    bucketlen = highbucket->len;
+    PER_UNUSE(highbucket);
+    highoffset = bucketlen - 1;
+    if (excludemax) {
 	    if (highoffset > 0)
 	    	--highoffset;
 	    else if (self->len < 2)
@@ -1521,73 +1521,73 @@
 	    	Py_DECREF(highbucket);
 	    	status = PreviousBucket(&highbucket, self->firstbucket);
 	    	if (status < 0) {
-	    	    Py_DECREF(lowbucket);
-	    	    goto err;
+          Py_DECREF(lowbucket);
+          goto err;
 	    	}
 	    	assert(status > 0);
 	    	Py_INCREF(highbucket);
-	        UNLESS (PER_USE(highbucket)) goto err_and_decref_buckets;
-	        highoffset = highbucket->len - 1;
-    	    	PER_UNUSE(highbucket);
+        UNLESS (PER_USE(highbucket)) goto err_and_decref_buckets;
+        highoffset = highbucket->len - 1;
+        PER_UNUSE(highbucket);
 	    }
-        }
-    	assert(highoffset >= 0);
     }
+    assert(highoffset >= 0);
+  }
 
-    /* It's still possible that the range is empty, even if min < max.  For
-     * example, if min=3 and max=4, and 3 and 4 aren't in the BTree, but 2 and
-     * 5 are, then the low position points to the 5 now and the high position
-     * points to the 2 now.  They're not necessarily even in the same bucket,
-     * so there's no trick we can play with pointer compares to get out
-     * cheap in general.
-     */
-    if (lowbucket == highbucket && lowoffset > highoffset)
-	goto empty_and_decref_buckets;      /* definitely empty */
+  /* It's still possible that the range is empty, even if min < max.  For
+   * example, if min=3 and max=4, and 3 and 4 aren't in the BTree, but 2 and
+   * 5 are, then the low position points to the 5 now and the high position
+   * points to the 2 now.  They're not necessarily even in the same bucket,
+   * so there's no trick we can play with pointer compares to get out
+   * cheap in general.
+   */
+  if (lowbucket == highbucket && lowoffset > highoffset)
+    goto empty_and_decref_buckets;      /* definitely empty */
 
-    /* The buckets differ, or they're the same and the offsets show a non-
-     * empty range.
-     */
-    if (min != Py_None && max != Py_None && /* both args user-supplied */
-        lowbucket != highbucket)   /* and different buckets */ {
-        KEY_TYPE first;
-        KEY_TYPE last;
-        int cmp;
+  /* The buckets differ, or they're the same and the offsets show a non-
+   * empty range.
+   */
+  if (min != Py_None && max != Py_None && /* both args user-supplied */
+      lowbucket != highbucket)   /* and different buckets */ {
+    KEY_TYPE first;
+    KEY_TYPE last;
+    int cmp;
 
-        /* Have to check the hard way:  see how the endpoints compare. */
-        UNLESS (PER_USE(lowbucket)) goto err_and_decref_buckets;
-        COPY_KEY(first, lowbucket->keys[lowoffset]);
-        PER_UNUSE(lowbucket);
+    /* Have to check the hard way:  see how the endpoints compare. */
+    UNLESS (PER_USE(lowbucket)) goto err_and_decref_buckets;
+    COPY_KEY(first, lowbucket->keys[lowoffset]);
+    PER_UNUSE(lowbucket);
 
-        UNLESS (PER_USE(highbucket)) goto err_and_decref_buckets;
-        COPY_KEY(last, highbucket->keys[highoffset]);
-        PER_UNUSE(highbucket);
+    UNLESS (PER_USE(highbucket)) goto err_and_decref_buckets;
+    COPY_KEY(last, highbucket->keys[highoffset]);
+    PER_UNUSE(highbucket);
 
-        TEST_KEY_SET_OR(cmp, first, last) goto err_and_decref_buckets;
-        if (cmp > 0) goto empty_and_decref_buckets;
-    }
+    TEST_KEY_SET_OR(cmp, first, last) goto err_and_decref_buckets;
+    if (cmp > 0) goto empty_and_decref_buckets;
+  }
 
-    PER_UNUSE(self);
+  PER_UNUSE(self);
 
-    result = newBTreeItems(type, lowbucket, lowoffset, highbucket, highoffset);
-    Py_DECREF(lowbucket);
-    Py_DECREF(highbucket);
-    return result;
+  result = newBTreeItems(type, lowbucket, lowoffset, highbucket, highoffset);
+  Py_DECREF(lowbucket);
+  Py_DECREF(highbucket);
+  return result;
 
  err_and_decref_buckets:
-    Py_DECREF(lowbucket);
-    Py_DECREF(highbucket);
+  Py_DECREF(lowbucket);
+  Py_DECREF(highbucket);
 
  err:
-    PER_UNUSE(self);
-    return NULL;
+  PER_UNUSE(self);
+  return NULL;
 
  empty_and_decref_buckets:
-    Py_DECREF(lowbucket);
-    Py_DECREF(highbucket);
+  Py_DECREF(lowbucket);
+  Py_DECREF(highbucket);
 
  empty:
-    PER_UNUSE(self);
-    return newBTreeItems(type, 0, 0, 0, 0);
+  PER_UNUSE(self);
+  return newBTreeItems(type, 0, 0, 0, 0);
 }
 
 /*
@@ -1596,7 +1596,7 @@
 static PyObject *
 BTree_keys(BTree *self, PyObject *args, PyObject *kw)
 {
-    return BTree_rangeSearch(self, args, kw, 'k');
+  return BTree_rangeSearch(self, args, kw, 'k');
 }
 
 /*
@@ -1605,7 +1605,7 @@
 static PyObject *
 BTree_values(BTree *self, PyObject *args, PyObject *kw)
 {
-    return BTree_rangeSearch(self, args, kw, 'v');
+  return BTree_rangeSearch(self, args, kw, 'v');
 }
 
 /*
@@ -1614,7 +1614,7 @@
 static PyObject *
 BTree_items(BTree *self, PyObject *args, PyObject *kw)
 {
-    return BTree_rangeSearch(self, args, kw, 'i');
+  return BTree_rangeSearch(self, args, kw, 'i');
 }
 
 static PyObject *
@@ -1703,36 +1703,36 @@
 static PyObject *
 BTree_has_key(BTree *self, PyObject *key)
 {
-    return _BTree_get(self, key, 1);
+  return _BTree_get(self, key, 1);
 }
 
 static PyObject *
 BTree_setdefault(BTree *self, PyObject *args)
 {
-    PyObject *key;
-    PyObject *failobj; /* default */
-    PyObject *value;   /* return value */
+  PyObject *key;
+  PyObject *failobj; /* default */
+  PyObject *value;   /* return value */
 
-    if (! PyArg_UnpackTuple(args, "setdefault", 2, 2, &key, &failobj))
-    	return NULL;
+  if (! PyArg_UnpackTuple(args, "setdefault", 2, 2, &key, &failobj))
+    return NULL;
 
-    value = _BTree_get(self, key, 0);
-    if (value != NULL)
-        return value;
+  value = _BTree_get(self, key, 0);
+  if (value != NULL)
+    return value;
 
-    /* The key isn't in the tree.  If that's not due to a KeyError exception,
-     * pass back the unexpected exception.
-     */
-    if (! PyErr_ExceptionMatches(PyExc_KeyError))
-        return NULL;
-    PyErr_Clear();
+  /* The key isn't in the tree.  If that's not due to a KeyError exception,
+   * pass back the unexpected exception.
+   */
+  if (! PyErr_ExceptionMatches(PyExc_KeyError))
+    return NULL;
+  PyErr_Clear();
 
-    /* Associate `key` with `failobj` in the tree, and return `failobj`. */
-    value = failobj;
-    if (_BTree_set(self, key, failobj, 0, 0) < 0)
-        value = NULL;
-    Py_XINCREF(value);
-    return value;
+  /* Associate `key` with `failobj` in the tree, and return `failobj`. */
+  value = failobj;
+  if (_BTree_set(self, key, failobj, 0, 0) < 0)
+    value = NULL;
+  Py_XINCREF(value);
+  return value;
 }
 
 /* forward declaration */
@@ -1742,42 +1742,42 @@
 static PyObject *
 BTree_pop(BTree *self, PyObject *args)
 {
-    PyObject *key;
-    PyObject *failobj = NULL; /* default */
-    PyObject *value;          /* return value */
+  PyObject *key;
+  PyObject *failobj = NULL; /* default */
+  PyObject *value;          /* return value */
 
-    if (! PyArg_UnpackTuple(args, "pop", 1, 2, &key, &failobj))
-    	return NULL;
+  if (! PyArg_UnpackTuple(args, "pop", 1, 2, &key, &failobj))
+    return NULL;
 
-    value = _BTree_get(self, key, 0);
-    if (value != NULL) {
-        /* Delete key and associated value. */
-        if (_BTree_set(self, key, NULL, 0, 0) < 0) {
-            Py_DECREF(value);
-            return NULL;;
-        }
-        return value;
+  value = _BTree_get(self, key, 0);
+  if (value != NULL) {
+    /* Delete key and associated value. */
+    if (_BTree_set(self, key, NULL, 0, 0) < 0) {
+      Py_DECREF(value);
+      return NULL;;
     }
+    return value;
+  }
 
-    /* The key isn't in the tree.  If that's not due to a KeyError exception,
-     * pass back the unexpected exception.
-     */
-    if (! PyErr_ExceptionMatches(PyExc_KeyError))
-        return NULL;
+  /* The key isn't in the tree.  If that's not due to a KeyError exception,
+   * pass back the unexpected exception.
+   */
+  if (! PyErr_ExceptionMatches(PyExc_KeyError))
+    return NULL;
 
-    if (failobj != NULL) {
-    	/* Clear the KeyError and return the explicit default. */
-    	PyErr_Clear();
-    	Py_INCREF(failobj);
-    	return failobj;
-    }
+  if (failobj != NULL) {
+    /* Clear the KeyError and return the explicit default. */
+    PyErr_Clear();
+    Py_INCREF(failobj);
+    return failobj;
+  }
 
-    /* No default given.  The only difference in this case is the error
-     * message, which depends on whether the tree is empty.
-     */
-    if (BTree_length_or_nonzero(self, 1) == 0) /* tree is empty */
-        PyErr_SetString(PyExc_KeyError, "pop(): BTree is empty");
-    return NULL;
+  /* No default given.  The only difference in this case is the error
+   * message, which depends on whether the tree is empty.
+   */
+  if (BTree_length_or_nonzero(self, 1) == 0) /* tree is empty */
+    PyErr_SetString(PyExc_KeyError, "pop(): BTree is empty");
+  return NULL;
 }
 
 /* Search BTree self for key.  This is the sq_contains slot of the
@@ -1791,14 +1791,14 @@
 static int
 BTree_contains(BTree *self, PyObject *key)
 {
-    PyObject *asobj = _BTree_get(self, key, 1);
-    int result = -1;
+  PyObject *asobj = _BTree_get(self, key, 1);
+  int result = -1;
 
-    if (asobj != NULL) {
-        result = PyInt_AsLong(asobj) ? 1 : 0;
-        Py_DECREF(asobj);
-    }
-    return result;
+  if (asobj != NULL) {
+    result = PyInt_AsLong(asobj) ? 1 : 0;
+    Py_DECREF(asobj);
+  }
+  return result;
 }
 
 static PyObject *
@@ -1825,42 +1825,42 @@
 static PyObject *
 buildBTreeIter(BTree *self, PyObject *args, PyObject *kw, char kind)
 {
-    BTreeIter *result = NULL;
-    BTreeItems *items = (BTreeItems *)BTree_rangeSearch(self, args, kw, kind);
+  BTreeIter *result = NULL;
+  BTreeItems *items = (BTreeItems *)BTree_rangeSearch(self, args, kw, kind);
 
-    if (items) {
-        result = BTreeIter_new(items);
-        Py_DECREF(items);
-    }
-    return (PyObject *)result;
+  if (items) {
+    result = BTreeIter_new(items);
+    Py_DECREF(items);
+  }
+  return (PyObject *)result;
 }
 
 /* The implementation of iter(BTree_or_TreeSet); the BTree tp_iter slot. */
 static PyObject *
 BTree_getiter(BTree *self)
 {
-    return buildBTreeIter(self, NULL, NULL, 'k');
+  return buildBTreeIter(self, NULL, NULL, 'k');
 }
 
 /* The implementation of BTree.iterkeys(). */
 static PyObject *
 BTree_iterkeys(BTree *self, PyObject *args, PyObject *kw)
 {
-    return buildBTreeIter(self, args, kw, 'k');
+  return buildBTreeIter(self, args, kw, 'k');
 }
 
 /* The implementation of BTree.itervalues(). */
 static PyObject *
 BTree_itervalues(BTree *self, PyObject *args, PyObject *kw)
 {
-    return buildBTreeIter(self, args, kw, 'v');
+  return buildBTreeIter(self, args, kw, 'v');
 }
 
 /* The implementation of BTree.iteritems(). */
 static PyObject *
 BTree_iteritems(BTree *self, PyObject *args, PyObject *kw)
 {
-    return buildBTreeIter(self, args, kw, 'i');
+  return buildBTreeIter(self, args, kw, 'i');
 }
 
 /* End of iterator support. */
@@ -1875,172 +1875,172 @@
 */
 
 static struct PyMemberDef BTree_members[] = {
-    {"_firstbucket", T_OBJECT, offsetof(BTree, firstbucket), RO},
-    {NULL}
+  {"_firstbucket", T_OBJECT, offsetof(BTree, firstbucket), RO},
+  {NULL}
 };
 
 static struct PyMethodDef BTree_methods[] = {
-    {"__getstate__", (PyCFunction) BTree_getstate,	METH_NOARGS,
-     "__getstate__() -> state\n\n"
-     "Return the picklable state of the BTree."},
+  {"__getstate__", (PyCFunction) BTree_getstate,	METH_NOARGS,
+   "__getstate__() -> state\n\n"
+   "Return the picklable state of the BTree."},
 
-    {"__setstate__", (PyCFunction) BTree_setstate,	METH_O,
-     "__setstate__(state)\n\n"
-     "Set the state of the BTree."},
+  {"__setstate__", (PyCFunction) BTree_setstate,	METH_O,
+   "__setstate__(state)\n\n"
+   "Set the state of the BTree."},
 
-    {"has_key",	(PyCFunction) BTree_has_key,	METH_O,
-     "has_key(key)\n\n"
-     "Return true if the BTree contains the given key."},
+  {"has_key",	(PyCFunction) BTree_has_key,	METH_O,
+   "has_key(key)\n\n"
+   "Return true if the BTree contains the given key."},
 
-    {"keys",	(PyCFunction) BTree_keys,	METH_KEYWORDS,
-     "keys([min, max]) -> list of keys\n\n"
-     "Returns the keys of the BTree.  If min and max are supplied, only\n"
-     "keys greater than min and less than max are returned."},
+  {"keys",	(PyCFunction) BTree_keys,	METH_KEYWORDS,
+   "keys([min, max]) -> list of keys\n\n"
+   "Returns the keys of the BTree.  If min and max are supplied, only\n"
+   "keys greater than min and less than max are returned."},
 
-    {"values",	(PyCFunction) BTree_values,	METH_KEYWORDS,
-     "values([min, max]) -> list of values\n\n"
-     "Returns the values of the BTree.  If min and max are supplied, only\n"
-     "values corresponding to keys greater than min and less than max are\n"
-     "returned."},
+  {"values",	(PyCFunction) BTree_values,	METH_KEYWORDS,
+   "values([min, max]) -> list of values\n\n"
+   "Returns the values of the BTree.  If min and max are supplied, only\n"
+   "values corresponding to keys greater than min and less than max are\n"
+   "returned."},
 
-    {"items",	(PyCFunction) BTree_items,	METH_KEYWORDS,
-     "items([min, max]) -> -- list of key, value pairs\n\n"
-     "Returns the items of the BTree.  If min and max are supplied, only\n"
-     "items with keys greater than min and less than max are returned."},
+  {"items",	(PyCFunction) BTree_items,	METH_KEYWORDS,
+   "items([min, max]) -> -- list of key, value pairs\n\n"
+   "Returns the items of the BTree.  If min and max are supplied, only\n"
+   "items with keys greater than min and less than max are returned."},
 
-    {"byValue",	(PyCFunction) BTree_byValue,	METH_O,
-     "byValue(min) ->  list of value, key pairs\n\n"
-     "Returns list of value, key pairs where the value is >= min.  The\n"
-     "list is sorted by value.  Note that items() returns keys in the\n"
-     "opposite order."},
+  {"byValue",	(PyCFunction) BTree_byValue,	METH_O,
+   "byValue(min) ->  list of value, key pairs\n\n"
+   "Returns list of value, key pairs where the value is >= min.  The\n"
+   "list is sorted by value.  Note that items() returns keys in the\n"
+   "opposite order."},
 
-    {"get",	(PyCFunction) BTree_getm,	METH_VARARGS,
-     "get(key[, default=None]) -> Value for key or default\n\n"
-     "Return the value or the default if the key is not found."},
+  {"get",	(PyCFunction) BTree_getm,	METH_VARARGS,
+   "get(key[, default=None]) -> Value for key or default\n\n"
+   "Return the value or the default if the key is not found."},
 
-    {"setdefault", (PyCFunction) BTree_setdefault, METH_VARARGS,
-     "D.setdefault(k, d) -> D.get(k, d), also set D[k]=d if k not in D.\n\n"
-     "Return the value like get() except that if key is missing, d is both\n"
-     "returned and inserted into the BTree as the value of k."},
+  {"setdefault", (PyCFunction) BTree_setdefault, METH_VARARGS,
+   "D.setdefault(k, d) -> D.get(k, d), also set D[k]=d if k not in D.\n\n"
+   "Return the value like get() except that if key is missing, d is both\n"
+   "returned and inserted into the BTree as the value of k."},
 
-    {"pop", (PyCFunction) BTree_pop, METH_VARARGS,
-     "D.pop(k[, d]) -> v, remove key and return the corresponding value.\n\n"
-     "If key is not found, d is returned if given, otherwise KeyError\n"
-     "is raised."},
+  {"pop", (PyCFunction) BTree_pop, METH_VARARGS,
+   "D.pop(k[, d]) -> v, remove key and return the corresponding value.\n\n"
+   "If key is not found, d is returned if given, otherwise KeyError\n"
+   "is raised."},
 
-    {"maxKey", (PyCFunction) BTree_maxKey,	METH_VARARGS,
-     "maxKey([max]) -> key\n\n"
-     "Return the largest key in the BTree.  If max is specified, return\n"
-     "the largest key <= max."},
+  {"maxKey", (PyCFunction) BTree_maxKey,	METH_VARARGS,
+   "maxKey([max]) -> key\n\n"
+   "Return the largest key in the BTree.  If max is specified, return\n"
+   "the largest key <= max."},
 
-    {"minKey", (PyCFunction) BTree_minKey,	METH_VARARGS,
-     "minKey([mi]) -> key\n\n"
-     "Return the smallest key in the BTree.  If min is specified, return\n"
-     "the smallest key >= min."},
+  {"minKey", (PyCFunction) BTree_minKey,	METH_VARARGS,
+   "minKey([mi]) -> key\n\n"
+   "Return the smallest key in the BTree.  If min is specified, return\n"
+   "the smallest key >= min."},
 
-    {"clear",	(PyCFunction) BTree_clear,	METH_NOARGS,
-     "clear()\n\nRemove all of the items from the BTree."},
+  {"clear",	(PyCFunction) BTree_clear,	METH_NOARGS,
+   "clear()\n\nRemove all of the items from the BTree."},
 
-    {"insert", (PyCFunction)BTree_addUnique, METH_VARARGS,
-     "insert(key, value) -> 0 or 1\n\n"
-     "Add an item if the key is not already used. Return 1 if the item was\n"
-     "added, or 0 otherwise."},
+  {"insert", (PyCFunction)BTree_addUnique, METH_VARARGS,
+   "insert(key, value) -> 0 or 1\n\n"
+   "Add an item if the key is not already used. Return 1 if the item was\n"
+   "added, or 0 otherwise."},
 
-    {"update",	(PyCFunction) Mapping_update,	METH_O,
-     "update(collection)\n\n Add the items from the given collection."},
+  {"update",	(PyCFunction) Mapping_update,	METH_O,
+   "update(collection)\n\n Add the items from the given collection."},
 
-    {"iterkeys", (PyCFunction) BTree_iterkeys,  METH_KEYWORDS,
-     "B.iterkeys([min[,max]]) -> an iterator over the keys of B"},
+  {"iterkeys", (PyCFunction) BTree_iterkeys,  METH_KEYWORDS,
+   "B.iterkeys([min[,max]]) -> an iterator over the keys of B"},
 
-    {"itervalues", (PyCFunction) BTree_itervalues,  METH_KEYWORDS,
-     "B.itervalues([min[,max]]) -> an iterator over the values of B"},
+  {"itervalues", (PyCFunction) BTree_itervalues,  METH_KEYWORDS,
+   "B.itervalues([min[,max]]) -> an iterator over the values of B"},
 
-    {"iteritems", (PyCFunction) BTree_iteritems,    METH_KEYWORDS,
-     "B.iteritems([min[,max]]) -> an iterator over the (key, value) items of B"},
+  {"iteritems", (PyCFunction) BTree_iteritems,    METH_KEYWORDS,
+   "B.iteritems([min[,max]]) -> an iterator over the (key, value) items of B"},
 
-    {"_check", (PyCFunction) BTree_check,       METH_NOARGS,
-     "Perform sanity check on BTree, and raise exception if flawed."},
+  {"_check", (PyCFunction) BTree_check,       METH_NOARGS,
+   "Perform sanity check on BTree, and raise exception if flawed."},
 
 #ifdef PERSISTENT
-    {"_p_resolveConflict", (PyCFunction) BTree__p_resolveConflict,
-     METH_VARARGS,
-     "_p_resolveConflict() -- Reinitialize from a newly created copy"},
+  {"_p_resolveConflict", (PyCFunction) BTree__p_resolveConflict,
+   METH_VARARGS,
+   "_p_resolveConflict() -- Reinitialize from a newly created copy"},
 
-    {"_p_deactivate", (PyCFunction) BTree__p_deactivate,	METH_KEYWORDS,
-     "_p_deactivate()\n\nReinitialize from a newly created copy."},
+  {"_p_deactivate", (PyCFunction) BTree__p_deactivate,	METH_KEYWORDS,
+   "_p_deactivate()\n\nReinitialize from a newly created copy."},
 #endif
-    {NULL, NULL}
+  {NULL, NULL}
 };
 
 static int
 BTree_init(PyObject *self, PyObject *args, PyObject *kwds)
 {
-    PyObject *v = NULL;
+  PyObject *v = NULL;
 
-    if (!PyArg_ParseTuple(args, "|O:" MOD_NAME_PREFIX "BTree", &v))
-	return -1;
+  if (!PyArg_ParseTuple(args, "|O:" MOD_NAME_PREFIX "BTree", &v))
+    return -1;
 
-    if (v)
-	return update_from_seq(self, v);
-    else
-	return 0;
+  if (v)
+    return update_from_seq(self, v);
+  else
+    return 0;
 }
 
 static void
 BTree_dealloc(BTree *self)
 {
-    if (self->state != cPersistent_GHOST_STATE)
-	_BTree_clear(self);
-    cPersistenceCAPI->pertype->tp_dealloc((PyObject *)self);
+  if (self->state != cPersistent_GHOST_STATE)
+    _BTree_clear(self);
+  cPersistenceCAPI->pertype->tp_dealloc((PyObject *)self);
 }
 
 static int
 BTree_traverse(BTree *self, visitproc visit, void *arg)
 {
-    int err = 0;
-    int i, len;
+  int err = 0;
+  int i, len;
 
 #define VISIT(SLOT)                             \
-    if (SLOT) {                                 \
-        err = visit((PyObject *)(SLOT), arg);   \
-        if (err)                                \
-            goto Done;                          \
-    }
+  if (SLOT) {                                   \
+    err = visit((PyObject *)(SLOT), arg);       \
+    if (err)                                    \
+      goto Done;                                \
+  }
 
-    if (self->ob_type == &BTreeType)
-	assert(self->ob_type->tp_dictoffset == 0);
+  if (self->ob_type == &BTreeType)
+    assert(self->ob_type->tp_dictoffset == 0);
 
-    /* Call our base type's traverse function.  Because BTrees are
-     * subclasses of Peristent, there must be one.
-     */
-    err = cPersistenceCAPI->pertype->tp_traverse((PyObject *)self, visit, arg);
-    if (err)
-	goto Done;
+  /* Call our base type's traverse function.  Because BTrees are
+   * subclasses of Peristent, there must be one.
+   */
+  err = cPersistenceCAPI->pertype->tp_traverse((PyObject *)self, visit, arg);
+  if (err)
+    goto Done;
 
-    /* If this is registered with the persistence system, cleaning up cycles
-     * is the database's problem.  It would be horrid to unghostify BTree
-     * nodes here just to chase pointers every time gc runs.
-     */
-    if (self->state == cPersistent_GHOST_STATE)
-	goto Done;
+  /* If this is registered with the persistence system, cleaning up cycles
+   * is the database's problem.  It would be horrid to unghostify BTree
+   * nodes here just to chase pointers every time gc runs.
+   */
+  if (self->state == cPersistent_GHOST_STATE)
+    goto Done;
 
-    len = self->len;
+  len = self->len;
 #ifdef KEY_TYPE_IS_PYOBJECT
-    /* Keys are Python objects so need to be traversed.  Note that the
-     * key 0 slot is unused and should not be traversed.
-     */
-    for (i = 1; i < len; i++)
-        VISIT(self->data[i].key);
+  /* Keys are Python objects so need to be traversed.  Note that the
+   * key 0 slot is unused and should not be traversed.
+   */
+  for (i = 1; i < len; i++)
+    VISIT(self->data[i].key);
 #endif
 
-    /* Children are always pointers, and child 0 is legit. */
-    for (i = 0; i < len; i++)
-        VISIT(self->data[i].child);
+  /* Children are always pointers, and child 0 is legit. */
+  for (i = 0; i < len; i++)
+    VISIT(self->data[i].child);
 
-    VISIT(self->firstbucket);
+  VISIT(self->firstbucket);
 
-Done:
-    return err;
+ Done:
+  return err;
 
 #undef VISIT
 }
@@ -2048,9 +2048,9 @@
 static int
 BTree_tp_clear(BTree *self)
 {
-    if (self->state != cPersistent_GHOST_STATE)
-	_BTree_clear(self);
-    return 0;
+  if (self->state != cPersistent_GHOST_STATE)
+    _BTree_clear(self);
+  return 0;
 }
 
 /*
@@ -2071,25 +2071,25 @@
 static Py_ssize_t
 BTree_length_or_nonzero(BTree *self, int nonzero)
 {
-    int result;
-    Bucket *b;
-    Bucket *next;
+  int result;
+  Bucket *b;
+  Bucket *next;
 
-    PER_USE_OR_RETURN(self, -1);
-    b = self->firstbucket;
-    PER_UNUSE(self);
-    if (nonzero)
-        return b != NULL;
+  PER_USE_OR_RETURN(self, -1);
+  b = self->firstbucket;
+  PER_UNUSE(self);
+  if (nonzero)
+    return b != NULL;
 
-    result = 0;
-    while (b) {
-        PER_USE_OR_RETURN(b, -1);
-        result += b->len;
-        next = b->next;
-        PER_UNUSE(b);
-        b = next;
-    }
-    return result;
+  result = 0;
+  while (b) {
+    PER_USE_OR_RETURN(b, -1);
+    result += b->len;
+    next = b->next;
+    PER_UNUSE(b);
+    b = next;
+  }
+  return result;
 }
 
 static Py_ssize_t
@@ -2105,16 +2105,16 @@
 };
 
 static PySequenceMethods BTree_as_sequence = {
-    (lenfunc)0,                     /* sq_length */
-    (binaryfunc)0,                  /* sq_concat */
-    (ssizeargfunc)0,                /* sq_repeat */
-    (ssizeargfunc)0,                /* sq_item */
-    (ssizessizeargfunc)0,           /* sq_slice */
-    (ssizeobjargproc)0,             /* sq_ass_item */
-    (ssizessizeobjargproc)0,        /* sq_ass_slice */
-    (objobjproc)BTree_contains,     /* sq_contains */
-    0,                              /* sq_inplace_concat */
-    0,                              /* sq_inplace_repeat */
+  (lenfunc)0,                     /* sq_length */
+  (binaryfunc)0,                  /* sq_concat */
+  (ssizeargfunc)0,                /* sq_repeat */
+  (ssizeargfunc)0,                /* sq_item */
+  (ssizessizeargfunc)0,           /* sq_slice */
+  (ssizeobjargproc)0,             /* sq_ass_item */
+  (ssizessizeobjargproc)0,        /* sq_ass_slice */
+  (objobjproc)BTree_contains,     /* sq_contains */
+  0,                              /* sq_inplace_concat */
+  0,                              /* sq_inplace_repeat */
 };
 
 static Py_ssize_t
@@ -2128,44 +2128,44 @@
   (inquiry)BTree_nonzero};
 
 static PyTypeObject BTreeType = {
-    PyObject_HEAD_INIT(NULL) /* PyPersist_Type */
-    0,					/* ob_size */
-    MODULE_NAME 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 */
-    &BTree_as_sequence,			/* 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 */
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
-	    Py_TPFLAGS_BASETYPE, 	/* tp_flags */
-    0,					/* tp_doc */
-    (traverseproc)BTree_traverse,	/* tp_traverse */
-    (inquiry)BTree_tp_clear,		/* tp_clear */
-    0,					/* tp_richcompare */
-    0,					/* tp_weaklistoffset */
-    (getiterfunc)BTree_getiter,		/* tp_iter */
-    0,					/* tp_iternext */
-    BTree_methods,			/* tp_methods */
-    BTree_members,			/* tp_members */
-    0,					/* tp_getset */
-    0,					/* tp_base */
-    0,					/* tp_dict */
-    0,					/* tp_descr_get */
-    0,					/* tp_descr_set */
-    0,					/* tp_dictoffset */
-    BTree_init,				/* tp_init */
-    0,					/* tp_alloc */
-    0, /*PyType_GenericNew,*/		/* tp_new */
+  PyObject_HEAD_INIT(NULL) /* PyPersist_Type */
+  0,					/* ob_size */
+  MODULE_NAME 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 */
+  &BTree_as_sequence,			/* 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 */
+  Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
+  Py_TPFLAGS_BASETYPE, 	/* tp_flags */
+  0,					/* tp_doc */
+  (traverseproc)BTree_traverse,	/* tp_traverse */
+  (inquiry)BTree_tp_clear,		/* tp_clear */
+  0,					/* tp_richcompare */
+  0,					/* tp_weaklistoffset */
+  (getiterfunc)BTree_getiter,		/* tp_iter */
+  0,					/* tp_iternext */
+  BTree_methods,			/* tp_methods */
+  BTree_members,			/* tp_members */
+  0,					/* tp_getset */
+  0,					/* tp_base */
+  0,					/* tp_dict */
+  0,					/* tp_descr_get */
+  0,					/* tp_descr_set */
+  0,					/* tp_dictoffset */
+  BTree_init,				/* tp_init */
+  0,					/* tp_alloc */
+  0, /*PyType_GenericNew,*/		/* tp_new */
 };
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.