Difference between revisions of "LT.c"

From Organic Design wiki
m
m (formatting)
Line 1: Line 1:
// 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
+
* Start at subject listItem and traverse the key as an association to a new listItem
// - subject and key (all list-item references are ints starting at item 0)
+
* - key is also a listItem reference and its binary address is used as the traversal path
// - if key is 0 the subject is returned unchanged, key 1 and 2 are the two single-iteration traversals
+
* - 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) {
 
item listTraverse(item subject, item key) {
 
if (key++ > 0) {
 
if (key++ > 0) {
Line 11: Line 13:
 
if (space[j] == 0) space[j] = listInsert();
 
if (space[j] == 0) space[j] = listInsert();
 
subject = space[j];
 
subject = space[j];
}
 
 
}
 
}
 +
}
 
return subject;
 
return subject;
}
+
}

Revision as of 05:46, 15 August 2008

/**

* 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++; if (space[j] == 0) space[j] = listInsert(); subject = space[j]; } } return subject; }