if (!dojo._hasResource["dojox.collections.Stack"]) { // _hasResource checks // added by build. Do // not use _hasResource // directly in your // code. dojo._hasResource["dojox.collections.Stack"] = true; dojo.provide("dojox.collections.Stack"); dojo.require("dojox.collections._base"); dojox.collections.Stack = function(/* array? */arr) { // summary // returns an object of type dojox.collections.Stack var q = []; if (arr) q = q.concat(arr); this.count = q.length; this.clear = function() { // summary // Clear the internal array and reset the count q = []; this.count = q.length; }; this.clone = function() { // summary // Create and return a clone of this Stack return new dojox.collections.Stack(q); }; this.contains = function(/* object */o) { // summary // check to see if the stack contains object o for (var i = 0; i < q.length; i++) { if (q[i] == o) { return true; // bool } } return false; // bool }; this.copyTo = function(/* array */arr, /* int */i) { // summary // copy the stack into array arr at index i arr.splice(i, 0, q); }; this.forEach = function(/* function */fn, /* object? */scope) { // summary // functional iterator, following the mozilla spec. dojo.forEach(q, fn, scope); }; this.getIterator = function() { // summary // get an iterator for this collection return new dojox.collections.Iterator(q); // dojox.collections.Iterator }; this.peek = function() { // summary // Return the next item without altering the stack itself. return q[(q.length - 1)]; // object }; this.pop = function() { // summary // pop and return the next item on the stack var r = q.pop(); this.count = q.length; return r; // object }; this.push = function(/* object */o) { // summary // Push object o onto the stack this.count = q.push(o); }; this.toArray = function() { // summary // create and return an array based on the internal collection return [].concat(q); // array }; } }