Subversion Repository Public Repository

litesoft

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package org.litesoft.core.util;

import java.util.*;

// Copyright Status:
//
// All Software available from LiteSoft.org (including this file) is
// hereby released into the public domain.
//
// It is free!  As in, you may use it freely in both commercial and
// non-commercial applications, bundle it with your software
// distribution, include it on a CD-ROM, list the source code in a book,
// mirror the documentation at your own web site, or use it in any other
// way you see fit.
//
// NO Warranty!
//
// All software is provided "as is".
//
// There is ABSOLUTELY NO WARRANTY OF ANY KIND: not for the design, fitness
// (for a particular purpose), level of errors (or lack thereof), or
// applicability of this software.  The entire risk as to the quality
// and performance of this software is with you.  Should this software
// prove defective, you assume the cost of all necessary servicing, repair
// or correction.
//
// In no event unless required by applicable law or agreed to in writing
// will any party who created or may modify and/or redistribute this
// software, be liable to you for damages, including any general,
// special, incidental or consequential damages arising out of the use or
// inability to use this software (including but not limited to loss of
// data or data being rendered inaccurate or losses sustained by you or
// third parties or a failure of this software to operate with any
// other programs), even if such holder or other party has been advised
// of the possibility of such damages.
//
// NOTE: Should you discover a bug, have a recogmendation for a change, wish
// to submit modifications, or wish to add new classes/functionality,
// please email them to:
//
//        changes@litesoft.org
//

/**
 * An Iterator (Read-Only) of an Array.<p>
 * <p/>
 * While this same functionality is provided by
 * Arrays.asList(array).iterator(), the tendency would be to
 * return Arrays.asList(array).  While the returned List does
 * NOT allow adds or removes, it unfortunately DOES
 * support set().  This means that the underlying Array
 * CAN BE modified.  Besides, if you don't want the List
 * object, but just the Iterator, why create it.
 *
 * @author George Smith
 * @version 1.0 7/28/01
 */

public class ArrayIterator<T> extends AbstractReadOnlyIterator<T>
{
    /**
     * Construct an Iterator for an Array.<p>
     *
     * @param pArray the Array to Iterate thru (null OK).
     */
    public ArrayIterator( T[] pArray )
    {
        this( "ArrayIterator", pArray );
    }

    /**
     * Super class constructor for an Iterator for an Array.<p>
     *
     * @param pInteratorName the Name for this Iterator (for toString) (null questionable).
     * @param pArray         the Array to Iterate thru (null OK).
     */
    protected ArrayIterator( String pInteratorName, T[] pArray )
    {
        zInteratorName = pInteratorName;
        arrayLen = ((zArray = pArray) == null) ? 0 : pArray.length;
    }

    private String zInteratorName;
    private T[] zArray;
    private int arrayLen, index = 0;

    /**
     * Returns <tt>true</tt>/<tt>false</tt>, depending on IF there is a
     * <i>current</i> object that <i>next()</i> will return.<p>
     *
     * @return If there is an Object available via <i>next()</i>.<p>
     *
     * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Util/Iterator.html#hasNext()">java.util.Iterator#hasNext()</a>
     */
    public final boolean hasNext()
    {
        return (index < arrayLen);
    }

    /**
     * Return the <i>current</i> object and advance the <i>underlying</i>
     * pointer/index.  If there is no <i>current</i> object, then a
     * NoSuchElementException is thrown.<p>
     *
     * @throws NoSuchElementException if nothing to return.<p>
     * @see <a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Util/Iterator.html#next()">java.util.Iterator#next()</a>
     */
    public final T next()
    {
        if ( hasNext() )
        {
            return zArray[index++];
        }
        throw new NoSuchElementException();
    }

    /**
     * Returns a debug/human friendly String that represents this.<p>
     *
     * @return A String representation of this.
     */
    public final String toString()
    {
        StringBuilder sb = new StringBuilder( zInteratorName );
        sb.append( ": " );
        if ( zArray == null )
        {
            sb.append( "null" );
        }
        else
        {
            sb.append( arrayLen );
            sb.append( " elements" );
            if ( !hasNext() )
            {
                sb.append( " AT END (NO MORE ELEMENTS)" );
            }
            if ( arrayLen != 0 )
            {
                sb.append( '\n' );
                for ( int i = 0; i < arrayLen; i++ )
                {
                    T entry = zArray[i];
                    sb.append( (i == index) ? " -> [" : "    [" );
                    sb.append( (entry == null) ? "?null?" : entry.toString() );
                    sb.append( "]\n" );
                }
            }
        }
        return sb.toString();
    }
}

Commits for litesoft/trunk/Java/core/Anywhere/src/org/litesoft/core/util/ArrayIterator.java

Diff revisions: vs.
Revision Author Commited Message
2 GeorgeS picture GeorgeS Sun 07 Feb, 2010 12:50:58 +0000