<HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <TITLE></TITLE> <Script language="JavaScript"> ////////////////////////////////////////////////////// // File: vector.js // // Author: Jason Geissler // // Date: Sept 3, 2003 // // Purpose: To have a dynamic collection instead // of using arrays when the total quantity // is unknown //////////////////////////////////////////////////////
// Vector Constructor -- constructs the object function Vector(inc) { if (inc == 0) { inc = 100; } /* Properties */ this.data = new Array(inc); this.increment = inc; this.size = 0; /* Methods */ this.getCapacity = getCapacity; this.getSize = getSize; this.isEmpty = isEmpty; this.getLastElement = getLastElement; this.getFirstElement = getFirstElement; this.getElementAt = getElementAt; this.addElement = addElement; this.insertElementAt = insertElementAt; this.removeElementAt = removeElementAt; this.removeAllElements = removeAllElements; this.indexOf = indexOf; this.contains = contains this.resize = resize; this.toString = toString; this.sort = sort; this.trimToSize = trimToSize; this.clone = clone; this.overwriteElementAt; }
// getCapacity() -- returns the number of elements the vector can hold function getCapacity() { return this.data.length; }
// getSize() -- returns the current size of the vector function getSize() { return this.size; }
// isEmpty() -- checks to see if the Vector has any elements function isEmpty() { return this.getSize() == 0; }
// getLastElement() -- returns the last element function getLastElement() { if (this.data[this.getSize() - 1] != null) { return this.data[this.getSize() - 1]; } }
// getFirstElement() -- returns the first element function getFirstElement() { if (this.data[0] != null) { return this.data[0]; } }
// getElementAt() -- returns an element at a specified index function getElementAt(i) { try { return this.data[i]; } catch (e) { return "Exception " + e + " occured when accessing " + i; } }
// addElement() -- adds a element at the end of the Vector function addElement(obj) { if(this.getSize() == this.data.length) { this.resize(); } this.data[this.size++] = obj; }
// insertElementAt() -- inserts an element at a given position function insertElementAt(obj, index) { try { if (this.size == this.capacity) { this.resize(); } for (var i=this.getSize(); i > index; i--) { this.data[i] = this.data[i-1]; } this.data[index] = obj; this.size++; } catch (e) { return "Invalid index " + i; } }
// removeElementAt() -- removes an element at a specific index function removeElementAt(index) { try { var element = this.data[index]; for(var i=index; i<(this.getSize()-1); i++) { this.data[i] = this.data[i+1]; } this.data[getSize()-1] = null; this.size--; return element; } catch(e) { return "Invalid index " + index; } }
// removeAllElements() -- removes all elements in the Vector function removeAllElements() { this.size = 0; for (var i=0; i<this.data.length; i++) { this.data[i] = null; } }
// indexOf() -- returns the index of a searched element function indexOf(obj) { for (var i=0; i<this.getSize(); i++) { if (this.data[i] == obj) { return i; } } return -1; }
// contains() -- returns true if the element is in the Vector, otherwise false function contains(obj) { for (var i=0; i<this.getSize(); i++) { if (this.data[i] == obj) { return true; } } return false; }
// resize() -- increases the size of the Vector function resize() { newData = new Array(this.data.length + this.increment); for (var i=0; i< this.data.length; i++) { newData[i] = this.data[i]; } this.data = newData; }
// trimToSize() -- trims the vector down to it's size function trimToSize() { var temp = new Array(this.getSize()); for (var i = 0; i < this.getSize(); i++) { temp[i] = this.data[i]; } this.size = temp.length - 1; this.data = temp; }
// sort() - sorts the collection based on a field name - f function sort(f) { var i, j; var currentValue; var currentObj; var compareObj; var compareValue; for(i=1; i<this.getSize();i++) { currentObj = this.data[i]; currentValue = currentObj[f]; j= i-1; compareObj = this.data[j]; compareValue = compareObj[f]; while(j >=0 && compareValue > currentValue) { this.data[j+1] = this.data[j]; j--; if (j >=0) { compareObj = this.data[j]; compareValue = compareObj[f]; } } this.data[j+1] = currentObj; } }
// clone() -- copies the contents of a Vector to another Vector returning the new Vector. function clone() { var newVector = new Vector(this.size); for (var i=0; i<this.size; i++) { newVector.addElement(this.data[i]); } return newVector; }
// toString() -- returns a string rep. of the Vector function toString() { var str = "Vector Object properties:n" + "Increment: " + this.increment + "n" + "Size: " + this.size + "n" + "Elements:n"; for (var i=0; i<getSize(); i++) { for (var prop in this.data[i]) { var obj = this.data[i]; str += "tObject." + prop + " = " + obj[prop] + "n"; } } return str; }
// overwriteElementAt() - overwrites the element with an object at the specific index. function overwriteElementAt(obj, index) { this.data[index] = obj; }
////////////////////////////////////////////////////// // File: Matrix.js // // Author: Jason Geissler // // Date: March 9, 2004 // // Purpose: To have a multidimensional dynamic collection instead // of using arrays when the total quantity // is unknown //////////////////////////////////////////////////////
// Matrix() - object constructor function Matrix(h, w) { /*Properties */ this.height = h; this.width = w; this.rows = new Vector(w); // set up this.rows. for (var r = 0; r < this.height; r++) { var theRow = new Vector(w);
for (var c = 0; c < this.width; c++) { theRow.addElement(null); } this.rows.addElement(theRow); } /*Methods*/ this.elementAt = elementAt; this.setElementAt = setElementAt; this.insertRow = insertRow; this.insertColumn = insertColumn; this.removeRowAt = removeRowAt; this.removeColumnAt = removeColumnAt; this.getWidth = getWidth; this.getHeight = getHeight; this.toString = toString; }
// getElementAt() - returns a value from the given row/column. function elementAt(row, col) { try { var theRow = this.rows.getElementAt(row); return theRow.getElementAt(col); } catch(e) { return "Invalid index"; } }
// setElementAt() - sets a value at a given row/column function setElementAt(value, row, col) { if (row < 0 || row >= this.height || col < 0 || col >= this.width) { return "Matrix object out of Bounds"; } var theRow = this.rows.getElementAt(row); theRow.insertElementAt(value, col); }
// insertRowAt() - Inserts a blank row at the end. function insertRow() { try { this.height++; var theRow = new Vector(this.width); for (var r = 0; r < this.width; r++) { theRow.addElement(null); } this.rows.insertElementAt(theRow, this.height-1); } catch (e) { return "Excecption occured " + e; } }
// insertColumnAt() -- Inserts a column at the end. function insertColumn() { try { this.width++; for (var c=0; c < this.height; c++) { this.rows.getElementAt(c).insertElementAt(null, this.width-1); } } catch (e) { return "Invalid column number"; } }
// removeRowAt() - removes a row at a given index. function removeRowAt(row) { try { var result = this.rows.getElementAt(row); this.height--; for (var r=row + 1; r <= this.height; r++) { var theRow = this.rows.getElementAt(r); this.rows.insertElementAt(theRow, r-1); this.rows.removeElementAt(r); }
return result; } catch (e) { return "Invalid row number"; } }
// removeColumnAt() - removes a given column function removeColumnAt(col) { try { var result = new Vector(this.height); this.width--; for(var r = 0; r < this.height; r++) { var element = this.rows.getElementAt(r).removeElementAt(col); result.addElement(element); } return result; } catch (e) { return "Invalid column number"; } }
// getWidth() - returns the Matrix width function getWidth() { return this.width; }
// getHeight() - returns the Matrix height function getHeight() { return this.height; }
// toString() - returns String data about the Matrix object function toString() { var s = "Height: " + this.height + " Width: " + this.width + " Rows: " + this.rows; return s; }
</Script> <Script language="JavaScript"> /* elementAt; setElementAt; insertRow; insertColumn; removeRowAt; removeColumnAt; getWidth; getHeight; toString; */ var theMatrix = new Matrix(8,8); var counter = 1; for (var i = 0; i < theMatrix.getHeight(); i++) { for (var j = 0; j < theMatrix.getWidth(); j++) { if (counter % 2 == 0) { theMatrix.setElementAt("red", i, j); } else { theMatrix.setElementAt("black", i, j); } counter++; } counter++; } </Script> </HEAD> <BODY> <Table align="center"> <TR><TD align=center colspan=8><B>Element At</TD></TR> <Script language="JavaScript"> for (var x = 0; x < theMatrix.getHeight(); x++) { document.write("<TR>"); for (var y = 0; y < theMatrix.getWidth(); y++) { var color = theMatrix.elementAt(x, y); document.write("<TD bgcolor='" + color + "'> </TD>"); } document.write("</TR>"); } document.writeln(""); document.writeln(""); document.writeln("<B>Width: </B>" + theMatrix.getWidth()); document.writeln("<B>Height: </B>" + theMatrix.getHeight()); document.writeln("<B>ToString: </B>" + theMatrix.toString()); </Script> </Table> <Table align="center"> <TR><TD align=center colspan=8><B>Remove Row At</TD></TR> <Script language="JavaScript"> var removedRow = theMatrix.removeRowAt(2); for (var x = 0; x < theMatrix.getHeight(); x++) { document.write("<TR>"); for (var y = 0; y < theMatrix.getWidth(); y++) { var color = theMatrix.elementAt(x, y) document.write("<TD bgcolor='" + color + "'> </TD>"); } document.write("</TR>"); } </Script> </Table> </Table> <Table align="center"> <TR><TD align=center colspan=8><B>Remove Column At</TD></TR> <Script language="JavaScript"> var removedRow = theMatrix.removeColumnAt(2); for (var x = 0; x < theMatrix.getHeight(); x++) { document.write("<TR>"); for (var y = 0; y < theMatrix.getWidth(); y++) { var color = theMatrix.elementAt(x, y) document.write("<TD bgcolor='" + color + "'> </TD>"); } document.write("</TR>"); } </Script> </Table> </BODY> </HTML>
|