Difference between revisions of "LT.c"

From Organic Design wiki
(simplify code for example)
m
Line 7: Line 7:
 
int i,j;
 
int i,j;
 
for (i = 1; i <= key >> 1; i <<= 1) {
 
for (i = 1; i <= key >> 1; i <<= 1) {
j = 3 * subject + (key & i ? 1 : 0);
+
j = subject * 3;
 +
if (key & i) j++;
 
subject = space[j];
 
subject = space[j];
 
if (subject) space[j]; else space[j] = listInsert();
 
if (subject) space[j]; else space[j] = listInsert();

Revision as of 04:03, 9 November 2006

// Start at subject listItem and traverse the key as an association to a new listItem // - key is also a listItem reference and its binary address is used as the traversal path // - subject and key (all list-item references are ints starting at item 0) // - if key is 0 the subject is returned unchanged, key 1 and 2 are the two single-iteration traversals item listTraverse(item subject, item key) { if (key++ > 0) { int i,j; for (i = 1; i <= key >> 1; i <<= 1) { j = subject * 3; if (key & i) j++; subject = space[j]; if (subject) space[j]; else space[j] = listInsert(); } } return subject; }