Difference between revisions of "NR.c"

From Organic Design wiki
(update here too)
(update)
Line 1: Line 1:
 
// Moves "this" to node's [[[[focus]]]] if exists then rotates [[[[loop]]]] and executes/reduces the focus item
 
// Moves "this" to node's [[[[focus]]]] if exists then rotates [[[[loop]]]] and executes/reduces the focus item
 
void nodeReduce() {
 
void nodeReduce() {
this = listGetValue(loop = this);                    // Move "this" to the [[[[focus]]]] in the node's [[[[loop]]]]
+
if (this = nodeLoopRotate(parent = this)) {      // Move "this" to the [[[[focus]]]] in the node's loop and rotate
if (this) {                                          // Returns immediately if no node in focus (next [[[[quantum]]]] would start at [[[[nodeROOT|root]]]] again)
+
nodeSetValue(this,nodePARENT,parent);         // Update the [[[[parent]]]] association
listSetValue(loop,nodeGetValue(this,nodeNEXT));  // Rotate the [[[[loop]]]]
+
if (code = *nodeState(this,nodeCODE)) code(); // [[[[nodeCODE]]]] value is a pointer-index, execute as function-reference if non-zero
nodeSetValue(this,nodePARENT,parent);             // Update the [[[[parent]]]] association
 
code *ptr = *nodeState(this,nodeCODE);           // [[[[nodeCODE|nodeCODE's]]]] state is either NULL, or a pointer to a function
 
if (ptr) ptr(); else nodeReduce();                // Execute ptr if non-NULL, else [[[[reduce]]]] item (give quantum to focus to reduce)
 
 
}
 
}
 
}
 
}

Revision as of 06:19, 29 November 2006

// Moves "this" to node's [[focus]] if exists then rotates [[loop]] and executes/reduces the focus item void nodeReduce() { if (this = nodeLoopRotate(parent = this)) { // Move "this" to the [[focus]] in the node's loop and rotate nodeSetValue(this,nodePARENT,parent); // Update the [[parent]] association if (code = *nodeState(this,nodeCODE)) code(); // [[nodeCODE]] value is a pointer-index, execute as function-reference if non-zero } }