summaryrefslogtreecommitdiff
path: root/core/java12/com/vladium/util/IntVector.java
diff options
context:
space:
mode:
authorUpstream <upstream-import@none>1970-01-12 13:46:40 +0000
committerUpstream <upstream-import@none>1970-01-12 13:46:40 +0000
commita921fd048da6858dc24d4370e3bba15fc9cc69ca (patch)
tree05caf4ec8cdf2edff2fcabe72522041710f2b756 /core/java12/com/vladium/util/IntVector.java
downloademma-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.java156
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