001: /*
002: Copyright (c) 2003, Dennis M. Sosnoski
003: All rights reserved.
004:
005: Redistribution and use in source and binary forms, with or without modification,
006: are permitted provided that the following conditions are met:
007:
008: * Redistributions of source code must retain the above copyright notice, this
009: list of conditions and the following disclaimer.
010: * Redistributions in binary form must reproduce the above copyright notice,
011: this list of conditions and the following disclaimer in the documentation
012: and/or other materials provided with the distribution.
013: * Neither the name of JargP nor the names of its contributors may be used
014: to endorse or promote products derived from this software without specific
015: prior written permission.
016:
017: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
018: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
019: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
020: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
021: ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
022: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
023: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
024: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
026: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027: */
028:
029: package org.jargp;
030:
031: /**
032: * String tracker for processing an array of strings. This is effectively a
033: * specialized iterator for processing an array of strings one at a time.
034: *
035: * @author Dennis M. Sosnoski
036: * @version 1.0
037: */
038:
039: public class StringTracker {
040: /** Array supplying string data. */
041: private final String[] m_source;
042:
043: /** Current position within array. */
044: private int m_position;
045:
046: /**
047: * Constructor
048: *
049: * @param source array supplying string data
050: * @param offset initial string position within source array
051: */
052:
053: public StringTracker(String[] source, int offset) {
054: m_source = source;
055: m_position = offset;
056: }
057:
058: /**
059: * Get next string from array, advancing past that string.
060: *
061: * @return next string from array
062: * @exception ArrayIndexOutOfBoundsException if past end of array
063: */
064:
065: public String next() {
066: return m_source[m_position++];
067: }
068:
069: /**
070: * Peek next string from array. Gets the next string without
071: * advancing the current string position.
072: *
073: * @return next string from array
074: * @exception ArrayIndexOutOfBoundsException if past end of array
075: */
076:
077: public String peek() {
078: return m_source[m_position];
079: }
080:
081: /**
082: * Check if another string is available.
083: *
084: * @return <code>true</code> if a string is available,
085: * <code>false</code> if at end
086: */
087:
088: public boolean hasNext() {
089: return m_position < m_source.length;
090: }
091:
092: /**
093: * Get position of next string in array.
094: *
095: * @return offset in array of next string
096: */
097:
098: public int nextOffset() {
099: return m_position;
100: }
101:
102: /**
103: * Get length of array.
104: *
105: * @return total number of strings in array
106: */
107:
108: public int length() {
109: return m_source.length;
110: }
111:
112: /**
113: * Get count of entries remaining.
114: *
115: * @return remaining number of strings in array
116: */
117:
118: public int countRemaining() {
119: return m_source.length - m_position;
120: }
121: }
|