Difference between revisions of "NR.c"
From Organic Design wiki
m |
(simplify for example) |
||
| 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) { // Returns immediately if no node in focus (next [[[[quantum]]]] would start at [[[[nodeROOT|root]]]] again) | ||
listSetValue(loop,nodeGetValue(this,nodeNEXT)); // Rotate the loop | listSetValue(loop,nodeGetValue(this,nodeNEXT)); // Rotate the loop | ||
| − | code *ptr = *nodeState(this,nodeCODE); // [[[[nodeCODE]]]] | + | code *ptr = *nodeState(this,nodeCODE); // [[[[nodeCODE|nodeCODE's]]]] state is either NULL, or a pointer to a function |
| − | ptr | + | if (ptr) ptr(); else nodeReduce(); // Execute ptr if non-NULL, else [[[[reduce]]]] item (give quantum to focus to reduce) |
} | } | ||
} | } | ||
Revision as of 02:11, 10 November 2006
// Moves "this" to node's [[focus]] if exists then rotates [[loop]] and executes/reduces the focus item void nodeReduce() { this = listGetValue(loop = this); // Move "this" to the [[focus]] in the node's [[loop]] if (this) { // Returns immediately if no node in focus (next [[quantum]] would start at [[root]] again) listSetValue(loop,nodeGetValue(this,nodeNEXT)); // Rotate the loop code *ptr = *nodeState(this,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) } }



