Kaydet (Commit) d8768d32 authored tarafından Tim Peters's avatar Tim Peters

Document some reverse-engineered invariants and pragmatic hints.

üst e644a1b9
...@@ -9,6 +9,21 @@ ...@@ -9,6 +9,21 @@
#define BLOCKLEN 46 #define BLOCKLEN 46
/* A `dequeobject` is composed of a doubly-linked list of `block` nodes.
* This list is not circular (the leftmost block has leftlink==NULL,
* and the rightmost block has rightlink==NULL). A deque d's first
* element is at d.leftblock[leftindex] and its last element is at
* d.rightblock[rightindex]; note that, unlike as for Python slice
* indices, this indices are inclusive on both ends.
* The list of blocks is never empty. An empty deque d has
* d.leftblock == d.rightblock != NULL; d.len == 0; and
* d.leftindex > d.rightindex; checking for d.len == 0 is the intended
* way to see whether d is empty.
* Note that since d.leftindex and d.rightindex may be indices into
* distinct blocks (and certainly are, for and d with len(d) > BLOCKLEN),
* it's not generally true that d.leftindex <= d.rightindex.
*/
typedef struct BLOCK { typedef struct BLOCK {
struct BLOCK *leftlink; struct BLOCK *leftlink;
struct BLOCK *rightlink; struct BLOCK *rightlink;
...@@ -31,8 +46,8 @@ typedef struct { ...@@ -31,8 +46,8 @@ typedef struct {
PyObject_HEAD PyObject_HEAD
block *leftblock; block *leftblock;
block *rightblock; block *rightblock;
int leftindex; int leftindex; /* in range(BLOCKLEN) */
int rightindex; int rightindex; /* in range(BLOCKLEN) */
int len; int len;
PyObject *weakreflist; /* List of weak references */ PyObject *weakreflist; /* List of weak references */
} dequeobject; } dequeobject;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment