001: /**
002: * ===========================================
003: * JFreeReport : a free Java reporting library
004: * ===========================================
005: *
006: * Project Info: http://reporting.pentaho.org/
007: *
008: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
009: *
010: * This library is free software; you can redistribute it and/or modify it under the terms
011: * of the GNU Lesser General Public License as published by the Free Software Foundation;
012: * either version 2.1 of the License, or (at your option) any later version.
013: *
014: * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015: * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016: * See the GNU Lesser General Public License for more details.
017: *
018: * You should have received a copy of the GNU Lesser General Public License along with this
019: * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020: * Boston, MA 02111-1307, USA.
021: *
022: * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023: * in the United States and other countries.]
024: *
025: * ------------
026: * IntList.java
027: * ------------
028: * (C) Copyright 2001-2007, by Object Refinery Ltd, Pentaho Corporation and Contributors.
029: */package org.jfree.report.util;
030:
031: /**
032: * A Array-List for integer objects. Ints can be added to the list and will be
033: * stored in an int-array.
034: * <p>
035: * Using this list for storing ints is much faster than creating java.lang.Integer
036: * objects and storing them in an ArrayList.
037: * <p>
038: * This list is not synchronized and does not implement the full List interface.
039: * In fact, this list can only be used to add new values or to clear the complete
040: * list.
041: *
042: * @author Thomas Morgner
043: */
044: public class IntList {
045: /** An empty array used to avoid object creation. */
046: private static final int[] EMPTY_ARRAY = new int[0];
047: /** The array holding the list data. */
048: private int[] data;
049: /** The size of the list. */
050: private int size;
051: /** The number of free slots added on every resize. */
052: private int increment;
053:
054: /**
055: * Creates a new IntList with the given initial capacity.
056: * The capacity will also be used as increment value when
057: * extending the capacity of the list.
058: *
059: * @param capacity the initial capacity.
060: */
061: public IntList(final int capacity) {
062: data = new int[capacity];
063: increment = capacity;
064: }
065:
066: /**
067: * Ensures, that the list backend can store at least <code>c</code>
068: * elements. This method does nothing, if the new capacity is less
069: * than the current capacity.
070: *
071: * @param c the new capacity of the list.
072: */
073: private void ensureCapacity(final int c) {
074: if (data.length <= c) {
075: final int[] newData = new int[Math.max(data.length
076: + increment, c + 1)];
077: System.arraycopy(data, 0, newData, 0, size);
078: data = newData;
079: }
080: }
081:
082: /**
083: * Adds the given int value to the list.
084: *
085: * @param value the new value to be added.
086: */
087: public void add(final int value) {
088: ensureCapacity(size);
089: data[size] = value;
090: size += 1;
091: }
092:
093: /**
094: * Returns the value at the given index.
095: *
096: * @param index the index
097: * @return the value at the given index
098: * @throws IndexOutOfBoundsException if the index is greater or
099: * equal to the list size or if the index is negative.
100: */
101: public int get(final int index) {
102: if (index >= size || index < 0) {
103: throw new IndexOutOfBoundsException(String.valueOf(index));
104: }
105: return data[index];
106: }
107:
108: /**
109: * Clears the list.
110: */
111: public void clear() {
112: size = 0;
113: }
114:
115: /**
116: * Returns the number of elements in this list.
117: *
118: * @return the number of elements in the list
119: */
120: public int size() {
121: return size;
122: }
123:
124: /**
125: * Copys the list contents into a new array.
126: *
127: * @return the list contents as array.
128: */
129: public int[] toArray() {
130: if (size == 0) {
131: return EMPTY_ARRAY;
132: }
133:
134: final int[] retval = new int[size];
135: System.arraycopy(data, 0, retval, 0, size);
136: return retval;
137: }
138: }
|