1  /**
     2   * com.sekati.data.Iterator
     3   * @version 1.0.0
     4   * @author jason m horwitz | sekati.com
     5   * Copyright (C) 2007  jason m horwitz, Sekat LLC. All Rights Reserved.
     6   * Released under the MIT License: http://www.opensource.org/licenses/mit-license.php
     7   */
     8  
     9  import com.sekati.core.CoreObject;
    10  
    11  /**
    12   * Data Array Iterator Class.
    13   */
    14  class com.sekati.data.Iterator extends CoreObject {
    15  
    16  	private var _data:Array;
    17  	private var _i:Number;
    18  
    19  	/**
    20  	 * Iterator Constructor
    21  	 * @param data (Array) data array
    22  	 * @throws Error on missing data arg.
    23  	 */
    24  	public function Iterator(data:Array) {
    25  		super( );
    26  		if(!data) {
    27  			throw new Error( "@@@ " + this.toString( ) + " Error: instance constructor expects data:Array argument." );
    28  			return;	
    29  		} else {
    30  			_data = data;
    31  			reset( );
    32  		}
    33  	}
    34  
    35  	/**
    36  	 * Returns the next element (or null if none)
    37  	 * @return Object
    38  	 */
    39  	public function next():Object {
    40  		return hasNext( ) ? _data[_i++] : null;
    41  	}
    42  
    43  	/**
    44  	 * Return the previous element (or null if none)
    45  	 * @return Object
    46  	 */
    47  	public function previous():Object {
    48  		return hasPrevious( ) ? _data[_i--] : null;
    49  	}
    50  
    51  	/**
    52  	 * Return the current element
    53  	 * @return Object
    54  	 */
    55  	public function current():Object {
    56  		return _data[_i];
    57  	}
    58  
    59  	/**
    60  	 * Reset the Iterator index.
    61  	 * @return Void
    62  	 */
    63  	public function reset():Void {
    64  		_i = -1;
    65  	}
    66  
    67  	/**
    68  	 * Check if iterator has a next element
    69  	 * @return Boolean
    70  	 */
    71  	public function hasNext():Boolean {
    72  		return _i + 1 < _data.length;
    73  	}
    74  
    75  	/**
    76  	 * Check if iterator has a previous element
    77  	 * @return Boolean
    78  	 */
    79  	public function hasPrevious():Boolean {
    80  		return _i - 1 >= 0;
    81  	}
    82  
    83  	/**
    84  	 * Return the next index if available.
    85  	 * @return Number
    86  	 */
    87  	public function nextIndex():Number {
    88  		return Math.min( _i + 1, _data.length );
    89  	}
    90  
    91  	/**
    92  	 * Return the previous index if available.
    93  	 * @return Number
    94  	 */
    95  	public function previousIndex():Number {
    96  		return Math.max( _i - 1, -1 );
    97  	}
    98  
    99  	/**
   100  	 * Return the current index.
   101  	 * @return Number
   102  	 */
   103  	public function currentIndex():Number {
   104  		return _i;
   105  	}
   106  
   107  	/**
   108  	 * Setter - overwrite the Iterator data array with new data.
   109  	 * @param data (Array)
   110  	 * @return Void
   111  	 */
   112  	public function set data(data:Array):Void {
   113  		_data = data;
   114  	}
   115  
   116  	/**
   117  	 * getter - return the Iterator data array.
   118  	 * @return Array
   119  	 */
   120  	public function get data():Array {
   121  		return _data;
   122  	}
   123  }