/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml */ dojo.provide("dojo.collections.Graph"); dojo.require("dojo.collections.Collections"); dojo.experimental("dojo.collections.Graph"); dojo.collections.Graph=function(nodes){ function node(key, data, neighbors) { this.key=key; this.data=data; this.neighbors=neighbors||new adjacencyList(); this.addDirected=function(){ if (arguments[0].constructor==edgeToNeighbor){ this.neighbors.add(arguments[0]); }else{ var n=arguments[0]; var cost=arguments[1]||0; this.neighbors.add(new edgeToNeighbor(n, cost)); } } } function nodeList(){ var d=new dojo.collections.Dictionary(); function nodelistiterator(){ var o=[] ; // Create an indexing array var e=d.getIterator(); while(e.get()){ o[o.length]=e.element; } var position=0; this.element=o[position]||null; this.atEnd=function(){ return (position>=o.length); } this.get=function(){ if(this.atEnd()){ return null; // object } this.element=o[position++]; return this.element; // object }; this.map=function(/* function */fn, /* object? */scope){ var s=scope||dj_global; if(Array.map){ return Array.map(o,fn,s); // array }else{ var arr=[]; for(var i=0; i 1){ n=new node(arguments[0],arguments[1]); } if(!this.nodes.containsKey(n.key)){ this.nodes.add(n); this.count++; } }; this.addDirectedEdge=function(uKey, vKey, cost){ var uNode,vNode; if(uKey.constructor!= node){ uNode=this.nodes.item(uKey); vNode=this.nodes.item(vKey); }else{ uNode=uKey; vNode=vKey; } var c=cost||0; uNode.addDirected(vNode,c); }; this.addUndirectedEdge=function(uKey, vKey, cost){ var uNode, vNode; if(uKey.constructor!=node){ uNode=this.nodes.item(uKey); vNode=this.nodes.item(vKey); }else{ uNode=uKey; vNode=vKey; } var c=cost||0; uNode.addDirected(vNode,c); vNode.addDirected(uNode,c); }; this.contains=function(n){ return this.nodes.containsKey(n.key); }; this.containsKey=function(k){ return this.nodes.containsKey(k); }; }