Mega Code Archive

 
Categories / Java / Collections Data Structure
 

Int Vector

/* 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 $  */ // ---------------------------------------------------------------------------- /**  * @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 new int[0];         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 // ----------------------------------------------------------------------------