ListSpace.c
From Organic Design wiki
// Create a new listItem in the space and return its index int listInsert() {
//printf("listInsert(): new item %d\n", items);
return items++;
}
// Start at subject listItem and traverse the object as an association to a new listItem // - object is also a listItem reference and its binary address is used as the traversal path // - subject and object (all list-item references are ints starting at item 0) int listTraverse( int subject, int object ) {
object += 2; // tmp: can't traverse items 0 or 1
int i;
for ( i = 1; i <= object >> 1; i <<= 1 ) {
int *addr = space + subject * 3 + (object & i ? 1 : 0); subject = *addr ? *addr : (*addr = listInsert()); }
return subject;
}
// Get the value (payload key) of the subject Item int listGetValue( int subject ) {
int *addr = space + subject * 3 + 2;
return *addr;
}
// Set the payload key of the subject Item to the passed value void listSetValue( int subject, int value ) {
int *addr = space + subject * 3 + 2;
*addr = value;
}



