1  /**
     2   * com.sekati.data.LoopIterator
     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.data.Iterator;
    10  
    11  /**
    12   * Loopable Iterator Class.
    13   */
    14  class com.sekati.data.LoopIterator extends Iterator {
    15  
    16  	/**
    17  	 * LoopIterator Constructor
    18  	 * @param data (Array) data array
    19  	 */
    20  	public function LoopIterator(data:Array) {
    21  		super( data );
    22  	}
    23  
    24  	/**
    25  	 * override - LoopIterator always has a next element.
    26  	 * @return Boolean
    27  	 */
    28  	public function hasNext():Boolean {
    29  		return true;
    30  	}
    31  
    32  	/**
    33  	 * override - LoopIterator always has a previous element.
    34  	 * @return Boolean
    35  	 */
    36  	public function hasPrevious():Boolean {
    37  		return true;
    38  	}
    39  
    40  	/**
    41  	 * override - LoopIterator starts at beginning once loops is complete.
    42  	 * @return Object
    43  	 */
    44  	public function next():Object {
    45  		if(super.hasNext( )) {
    46  			return super.next( );
    47  		} else {
    48  			super.reset( );
    49  			return super.next( );
    50  		}
    51  	}
    52  
    53  	/**
    54  	 * override - LoopIterator starts at end once loops is hits the begining.
    55  	 */
    56  	public function previous():Object {
    57  		if(super.hasPrevious( )) {
    58  			return super.previous( );
    59  		} else {
    60  			_i = _data.length - 1;
    61  			return _data[_i];
    62  		}
    63  	}
    64  
    65  	/**
    66  	 * Check is Iterator is at 0 index.
    67  	 * @return Boolean
    68  	 */
    69  	public function isAtStart():Boolean {
    70  		return _i == 0;
    71  	}
    72  
    73  	/**
    74  	 * Check if Iterator is at last index.
    75  	 * @return Boolean
    76  	 */
    77  	public function isAtEnd():Boolean {
    78  		return _i == _data.length - 1;
    79  	}
    80  }