Clarify the relationship between indices.

This commit is contained in:
Raymond Hettinger 2004-10-01 15:14:39 +00:00
parent 61f05fb96d
commit 4ca4c7c8cc
1 changed files with 7 additions and 5 deletions

View File

@ -7,7 +7,7 @@
All rights reserved. All rights reserved.
*/ */
#define BLOCKLEN 46 #define BLOCKLEN 2
#define CENTER ((BLOCKLEN - 1) / 2) #define CENTER ((BLOCKLEN - 1) / 2)
/* A `dequeobject` is composed of a doubly-linked list of `block` nodes. /* A `dequeobject` is composed of a doubly-linked list of `block` nodes.
@ -24,17 +24,19 @@
* *
* The indices, d.leftindex and d.rightindex are always in the range * The indices, d.leftindex and d.rightindex are always in the range
* 0 <= index < BLOCKLEN. * 0 <= index < BLOCKLEN.
* Their exact relationship is:
* (d.leftindex + d.len - 1) % BLOCKLEN == d.rightindex.
* *
* Empty deques have d.len == 0; d.leftblock==d.rightblock; * Empty deques have d.len == 0; d.leftblock==d.rightblock;
* d.leftindex == CENTER+1; and d.rightindex == CENTER. * d.leftindex == CENTER+1; and d.rightindex == CENTER.
* Checking for d.len == 0 is the intended way to see whether d is empty. * Checking for d.len == 0 is the intended way to see whether d is empty.
* *
* Whenever d.leftblock == d.rightblock, * Whenever d.leftblock == d.rightblock,
* d.leftindex + d.len == d.rightindex + 1. * d.leftindex + d.len - 1 == d.rightindex.
* *
* However, when d.leftblock != rightblock, d.leftindex and d.rightindex * However, when d.leftblock != d.rightblock, d.leftindex and d.rightindex
* are indices into distinct blocks and have no relationship to one * become indices into distinct blocks and either may be larger than the
* another (for example, sometimes d.leftindex > d.rightindex). * other.
*/ */
typedef struct BLOCK { typedef struct BLOCK {