diff options
author | Upstream <upstream-import@none> | 1970-01-12 13:46:40 +0000 |
---|---|---|
committer | Upstream <upstream-import@none> | 1970-01-12 13:46:40 +0000 |
commit | a921fd048da6858dc24d4370e3bba15fc9cc69ca (patch) | |
tree | 05caf4ec8cdf2edff2fcabe72522041710f2b756 /core/java12/com/vladium/util/IntVector.java | |
download | emma-a921fd048da6858dc24d4370e3bba15fc9cc69ca.tar.gz |
external/emma 2.0.5312upstream/2.0.5312
Diffstat (limited to 'core/java12/com/vladium/util/IntVector.java')
-rw-r--r-- | core/java12/com/vladium/util/IntVector.java | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/core/java12/com/vladium/util/IntVector.java b/core/java12/com/vladium/util/IntVector.java new file mode 100644 index 0000000..2bc4a99 --- /dev/null +++ b/core/java12/com/vladium/util/IntVector.java @@ -0,0 +1,156 @@ +/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. + * + * This program and the accompanying materials are made available under + * the terms of the Common Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/cpl-v10.html + * + * $Id: IntVector.java,v 1.1.1.1 2004/05/09 16:57:53 vlad_r Exp $ + */ +package com.vladium.util; + +// ---------------------------------------------------------------------------- +/** + * @author Vlad Roubtsov, (C) 2001 + */ +public +final class IntVector implements Cloneable +{ + // public: ................................................................ + + public IntVector () + { + this (5); + } + + public IntVector (final int initCapacity) + { + m_values = new int [initCapacity]; + } + + // ACCESSORS: + + public int get (final int index) + { + if (index > m_size - 1) + throw new IndexOutOfBoundsException ("get[" + index + "] on vector of size " + m_size);
+ return m_values [index]; + } + + public int [] values () + { + if (m_size == 0) + return IConstants.EMPTY_INT_ARRAY; + else + { + final int size = m_size; + final int [] result = new int [size]; + + if (size < COPY_THRESHOLD) + { + for (int i = 0; i < size; ++ i) result [i] = m_values [i]; + } + else + { + System.arraycopy (m_values, 0, result, 0, size); + } + + return result; + } + } + + public int size () + { + return m_size; + } + + // Cloneable: + + /** + * Performs deep copy. + */ + public Object clone () + { + try + { + final IntVector _clone = (IntVector) super.clone (); + + // deep clone: + if (m_size < COPY_THRESHOLD) + { + _clone.m_values = new int [m_values.length]; + final int [] _clone_values = _clone.m_values; + for (int i = 0; i < m_size; ++ i) _clone_values [i] = m_values [i]; + } + else + { + _clone.m_values = (int []) m_values.clone (); + } + + return _clone; + } + catch (CloneNotSupportedException e) + { + throw new InternalError (e.toString ()); + } + } + + public String toString () + { + final StringBuffer s = new StringBuffer (super.toString() + ", size " + m_size + ": "); + for (int i = 0; i < m_size; ++ i) + { + if (i > 0) s.append (", "); + s.append (m_values [i]); + } + + return s.toString (); + } + + // MUTATORS: + + public int set (final int index, final int value) + { + if (index > m_size - 1) + throw new IndexOutOfBoundsException ("get[" + index + "] on vector of size " + m_size); + + final int current_value = m_values [index]; + m_values [index] = value; + + return current_value; + } + + public void add (final int value) + { + final int capacity = m_values.length; + if (capacity == m_size) + { + final int [] values = new int [1 + (capacity << 1)]; + if (capacity < COPY_THRESHOLD) + { + for (int i = 0; i < capacity; ++ i) values [i] = m_values [i]; + } + else + { + System.arraycopy (m_values, 0, values, 0, capacity); + } + + m_values = values; + } + + m_values [m_size ++] = value; + } + + // protected: ............................................................. + + // package: ............................................................... + + // private: ............................................................... + + + private int [] m_values; // never null + private int m_size; + + private static final int COPY_THRESHOLD = 10; + +} // end of class +// ----------------------------------------------------------------------------
\ No newline at end of file |