Difference between revisions of "Peer-nodal.as"
(No need for free-list since no list-space env limitations) |
|||
Line 30: | Line 30: | ||
// - create and delete are called internally from get/set | // - create and delete are called internally from get/set | ||
− | nodal = { | + | nodal = { idcount: 0, nodes: 0 }; |
// Create | // Create | ||
// - the delete-list is only needed for limited list-space env | // - the delete-list is only needed for limited list-space env | ||
− | nodal.create = function() { | + | // - Actionscript failed ref-as-hashkey test, |
− | var node = { | + | // so we use a id (locally unique identifier) as a lookup-key |
− | + | nodal.create = function( context, class ) { | |
− | this. | + | var node = { id: this.idcount++ }; |
+ | return context[class.id] = node; | ||
+ | this.nodes++; | ||
}; | }; | ||
− | nodal.delete = function( | + | nodal.delete = function( context, class ) { |
− | delete | + | delete context[class.id]; |
− | + | this.nodes--; | |
}; | }; | ||
− | nodal.store = function( | + | nodal.store = function( context, path, data ) { |
} | } | ||
− | nodal.fetch = function() { | + | nodal.fetch = function( context, path) { |
+ | return data; | ||
} | } | ||
Line 66: | Line 69: | ||
} | } | ||
− | |||
− | |||
// - calling this resolve so not confused with list-space-trie process | // - calling this resolve so not confused with list-space-trie process | ||
nodal.resolve = function( path ) { | nodal.resolve = function( path ) { |
Revision as of 08:01, 6 April 2006
// NODAL ASSOCIATIONS // - associations (maintained class:instance relationships) // instance.create/delete(class) calls class.create/delete(instance) // create inserts the instance into the classes instance-loop (list-aspect, next/prev) // ie. our list of current children (that our E divides amongst) is also our instance-loop // has or is are one, they're all just relationships that receive a portion of energy // laster: a chain of delegate classes is created between root and the instance // - the class of any assoc requires a portion of the quanta // remember, next/prev and complimented by parent/current (parent is also class) // - this allows alternate quanta be divided between parent and current, thus providing // energy for the class->instance relationship // - get retreives from class value if no instance value at each step of a path
// REDUCTION // - 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
// DATA STRUCTURE // A question that keeps cropping up is: // is it best to use the language's native list type, // or to use a linked list constructed of next and prev refs. // The best idea (since swf failed key-as-ref) is to use array-index-only as key, // but allow any datatype as value, that way we can use a list or not later on // values could be node-ref (index), list, lambda, or function-ref
// We'll fake a list-space with an array
// - create and delete are called internally from get/set
nodal = { idcount: 0, nodes: 0 };
// Create // - 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 nodal.create = function( context, class ) { var node = { id: this.idcount++ }; return context[class.id] = node; this.nodes++; };
nodal.delete = function( context, class ) { delete context[class.id]; this.nodes--; };
nodal.store = function( context, path, data ) { }
nodal.fetch = function( context, path) { return data; }
// This is the old ecma reduction tree taken from SIC code
// - needs major modification, but has the core language features needed
nodal.reduce = function() {
cwd = root;
for (var i = 1; i == 1;) {
var queue = cwd.queue;
if (queue.length > 0) {
var todo = queue.shift();
if (next = typeOf(todo) == 'function' ? (i = todo.call) : (cwd = todo)) queue.push(next);
}
else i = 0;
}
}
// - calling this resolve so not confused with list-space-trie process nodal.resolve = function( path ) { ptr = THIS; for ( i in path ) ptr = ptr['i'+i]; return ptr; }