ActionScript 3 AS3 ArrayQueue ADT类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActionScript 3 AS3 ArrayQueue ADT类相关的知识,希望对你有一定的参考价值。

package
{
	import flash.display.Sprite;
	
	/***********************************************************************************************\
	* ArrayQueue Class - Designed to give generic functionality to a queue collection type.         *
	* This collection is to be implemented in a FIFO principles. With adding, removing, searching,  *
	* trace output, and state functions of the collection.                                          *
	* @author : Richard Vacheresse /|\ http://www.rvacheresse.com /|\                               *
	* Licensed for free Commercial and Private use creative commons license agreement.              *
	* The provided code is in an "as-is" state. Richard Vacheresse makes no warranties              *
	* regarding the provided code, and disclaims liability for damages resulting from its use.      *
	* @version 1.0                                                                                  *
	\***********************************************************************************************/
	public class ArrayQueue extends Sprite implements QueueADT
	{
		//- default capapcity of queue
		private var DEFAULT_CAPACITY:int = 100;
		//- indicates the value of the last
		private var rear:int;
		//- array object to hold the objects
		private var queue:Array;
		
		/**
		* ArrayQueue() Constructor - Creates an empty queue using the default capacity.
		* @variable - DEFAULT_CAPACITY - The default value for the queue's capacity.
		* @variable - rear - Indicates the value of the last object + one as an Integer object.
		* @variable - queue - The container object that will hold the objects of type array.
		**/
		public function ArrayQueue():void
		{
			//- set rear to 0 since the queue is empty 
			rear = 0;
			
			// - instantiate a new array object at the default capacity of 100
			queue = new Array(DEFAULT_CAPACITY);
			
			//- output to console
			trace("New ArrayQueue Created At Default Capacity");
		}
		
		/**
		* ArrayQueueDefined(queueSize:int) function - Creates an empty queue using the passed in value. 
		**/
		public function ArrayQueueDefined(queueSize:int):void
		{
			//- set rear to 0 since the queue is empty 
			rear = 0;
			
			// - instantiate a new array object at the passed value size
			queue = new Array(queueSize);
			
			//- output to console
			trace("New ArrayQueue Created At: " + queueSize);
		}
		
		/**
		 * dequeue() function - Removes the first item in the queue.
		 *                    - Then shifts the queue minus the removed object
		 *                    - Decrement rear to reflect minus one object.
		 * @return - Object
		**/
		public function dequeue():Object
		{
			//- if the collection is empty throw an error
			if(isEmpty())
				throw new Error("Queue contains no objects");
			
			//- else remove the object at the first position
			var result:Object = queue[0];
			
			//- decrement the rear by one
			rear--;
			
			//- shift the elements forward one position
			for(var scan:int = 0; scan < rear; scan++)
				queue[scan] = queue[scan+1];
			
			//- set the rear null again to null
			queue[rear] = null;
			
			//- output to console
			trace("Item " + result + " dequeued.");
			
			//- return the first objec in the array
			return result;
		}
		
		/**
		* enqueue(obj:Object) function - Takes the passed object and adds it to the
		*                                rear indicated position.
		*                              - Increment the rear value + one to reflect
		*                                the additional object.
		**/
		public function enqueue(obj:Object):void
		{
			queue[rear] = obj;
			rear++;
		}
		
		/**
		* first() function - Returns the first object in the queue but does not remove it.
		* @return - Object
		**/
		public function first():Object
		{
			var result:Object = "null";
			
			if(isEmpty())
				throw new Error("The queue is empty");
			//- set result pointer equal to first item but do not remove
			result = queue[0];
			//- output to console
			trace("Item " + queue[0] + " is next.");
			
			return result;
		}
		
		/**
		* size() function - Returns the number of objects in the queue.
		* @return - Integer Object 
		**/
		public function size():int
		{
			return rear;
		}
		
		/**
		* getLength() accessor function - Returns an integer value of the length of the queue.
		* @return - Integer Object
		**/
		public function getLength():int
		{
			return queue.length;
		}
		
		/**
		* isEmpty() function - Returns True if the value of rear is equal to zero.
		* @return - Boolean Object
		**/
		public function isEmpty():Boolean
		{
			return (rear == 0);
		}
				
		/**
		* expandCapacity() function - Creates a new array of twice the size of the current
		*                             array queue.
		*                           - Then it repopulates the new larger Array with the
		*                             original values.
		**/
		public function expandCapacity():void
		{
			var result:int = (queue.length*2);
			var larger:Array = new Array(result);
			
			for(var scan:int = 0; scan < queue.length; scan++)
				larger[scan] = queue[scan];
				
			queue = larger;
		}
		
		/**
		* toString():String function - Returns a custom String object to represent the queue.
		*                            - Overriden only because it is of type Sprite, (which has
		*                              by default its' own toString() function), therefore we
		*                              need more information about the queue.
		* @return - String Object
		**/
		override public function toString():String
		{
			var result:String = ("------------------\n" +
								 "Queue toString()\n" +
			 	  				 "------------------\n" +
								 "Queue has " + size() + " items.\n");
			
			for(var scan:int = 0; scan < rear; scan++)
			{
				result += ("Item: " + scan + " is a: " + queue[scan] + "\n");
			}
			return result;
		}
				
	}
}

以上是关于ActionScript 3 AS3 ArrayQueue ADT类的主要内容,如果未能解决你的问题,请参考以下文章

[ActionScript 3.0] AS3.0 水面波纹效果

ActionScript 3 AS3:使用SWFObject2和AS3传递变量

ActionScript 3 克隆数组(AS3)

ActionScript 3 AS3序列化

ActionScript 3 As3初始上限

ActionScript 3 AS3 HTML清理