Difference between revisions of "Peer-nodal.as"
m |
(pass ROOT as key) |
||
Line 11: | Line 11: | ||
// NODAL PROPERTIES & CORE NODAL CONCEPTS | // NODAL PROPERTIES & CORE NODAL CONCEPTS | ||
− | // idcount is a accumulating-only counter for locally-unique-id number | + | // - all-capital-identifiers are node-references |
− | // nodes is the current number of instantiated node objects | + | // - ROOT.idcount is a accumulating-only counter for locally-unique-id number |
+ | // - ROOT.nodes is the current number of instantiated node objects | ||
ROOT = { idcount: 0, nodes: 0 }; | ROOT = { idcount: 0, nodes: 0 }; | ||
− | NEXT = new node(); | + | NEXT = new node( ROOT ); |
− | PREV = new node(); | + | PREV = new node( ROOT ); |
− | FUNC = new node(); | + | FUNC = new node( ROOT ); |
− | FOCUS = new node(); | + | FOCUS = new node( ROOT ); |
// NODE OBJECT | // NODE OBJECT |
Revision as of 07:56, 10 April 2006
// Liscenced under LGPL: www.gnu.org/copyleft/lesser.html // // peer-nodal.as - ecma-script implimentation of the nodal core // Nad - 2006 //
// ISSUES // - associations (maintained class:instance relationships) // - get should use class content as default - resolve() doesn't // so either add get/set which use resolve, or remove object-freedom and have only .data
// NODAL PROPERTIES & CORE NODAL CONCEPTS // - all-capital-identifiers are node-references // - ROOT.idcount is a accumulating-only counter for locally-unique-id number // - ROOT.nodes is the current number of instantiated node objects ROOT = { idcount: 0, nodes: 0 }; NEXT = new node( ROOT ); PREV = new node( ROOT ); FUNC = new node( ROOT ); FOCUS = new node( ROOT );
// NODE OBJECT // - note: only a node's parent can adjust a nodes prev/next function node( key ) { ROOT.nodes++; this.id = ROOT.idcount++; this.set( [FOCUS], ROOT ); // current-loop is null };
// NODAL METHODS // - the delete-list is only needed for limited list-space env // - Actionscript failed ref-as-hashkey test, // so we use a id (locally unique identifier) as a lookup-key // - no delete currently // - just get/set properties with normal object-accessor way // - but keep all hierarchy nodal
node.prototype.set( path, value ) { ptr = this._resolve( path ); ptr.value = value; };
node.prototype.get( path ) { ptr = this._resolve( path ); // need to return class.value onNonExistent return ptr.value; };
// Resolve creates if non existent and returns reference to result // - this is private, used by get/set node.prototype._resolve = function( path ) { var context = this; while( path.length ) { var key = path.shift(); context = context[key.id] == null ? context[key.id] = new node( key ) : context[ key.id ]; } return context; };
// Consume one quanta // - each quantum is actually two, one for local instance, one for global class // - all instance-loops work by going cd this.current then assigning this.current.next to it // when a function executes, it can update the loop at that location (equiv to array.push) // - a functions parameters (and even further methods and tools) are child associations // the structures necessary to build the fucntion are child assocs too node.prototype.reduce = function() { var ptr = this;
// Queue rotation var focus = ptr.get( [FOCUS] ); ptr.set( [FOCUS], ptr.get( [FOCUS,NEXT] ) );
// If there's a local function declaration, execute if ( func = ptr.get( [FUNC] ) ) { ref = func.call // also call class.reduce() };
// if not, send the quanta downstairs if there's a basement else if ( ) { };
};