Difference between revisions of "Peer-nodal.as"

From Organic Design wiki
(Actually skip all list-space detail and use object)
(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 = { root: {}, guids: 0 };
nodal.root = [];
 
nodal.free = [];
 
  
 +
// Create
 +
// - the delete-list is only needed for limited list-space env
 
nodal.create = function() {
 
nodal.create = function() {
return this.free.pop();
+
var node = { guid: this.guids++ };
 +
this.root[node.guid] = node;
 +
this.free.push( node );
 
};
 
};
  
 
nodal.delete = function( node ) {
 
nodal.delete = function( node ) {
free.push( node );
+
delete this.root[node.guid];
 +
delete node;
 
};
 
};
  
Line 47: Line 50:
 
nodal.fetch = function() {
 
nodal.fetch = function() {
 
}
 
}
 +
  
 
// This is the old ecma reduction tree taken from SIC code
 
// This is the old ecma reduction tree taken from SIC code

Revision as of 07:49, 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 = { root: {}, guids: 0 };

// Create // - the delete-list is only needed for limited list-space env nodal.create = function() { var node = { guid: this.guids++ }; this.root[node.guid] = node; this.free.push( node ); };

nodal.delete = function( node ) { delete this.root[node.guid]; delete node; };

nodal.store = function( val ) { }

nodal.fetch = function() { }


// 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; } }

// Actionscript failed ref-as-hashkey test // - so we need to make wrapper functions that accept/return refs, their form is private // - 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; }