1f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. 2f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 3f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This program and the accompanying materials are made available under 4f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the terms of the Common Public License v1.0 which accompanies this distribution, 5f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * and is available at http://www.eclipse.org/legal/cpl-v10.html 6f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 7f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * $Id: IntVector.java,v 1.1.1.1 2004/05/09 16:57:53 vlad_r Exp $ 8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpackage com.vladium.util; 10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ---------------------------------------------------------------------------- 12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/** 13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author Vlad Roubtsov, (C) 2001 14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpublic 16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectfinal class IntVector implements Cloneable 17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{ 18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // public: ................................................................ 19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public IntVector () 21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project this (5); 23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public IntVector (final int initCapacity) 26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_values = new int [initCapacity]; 28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // ACCESSORS: 31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public int get (final int index) 33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (index > m_size - 1) 35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project throw new IndexOutOfBoundsException ("get[" + index + "] on vector of size " + m_size); 36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return m_values [index]; 38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public int [] values () 41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (m_size == 0) 43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return IConstants.EMPTY_INT_ARRAY; 44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project else 45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int size = m_size; 47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int [] result = new int [size]; 48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (size < COPY_THRESHOLD) 50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0; i < size; ++ i) result [i] = m_values [i]; 52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project else 54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project System.arraycopy (m_values, 0, result, 0, size); 56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return result; 59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public int size () 63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return m_size; 65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // Cloneable: 68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Performs deep copy. 71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public Object clone () 73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project try 75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final IntVector _clone = (IntVector) super.clone (); 77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // deep clone: 79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (m_size < COPY_THRESHOLD) 80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project _clone.m_values = new int [m_values.length]; 82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int [] _clone_values = _clone.m_values; 83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0; i < m_size; ++ i) _clone_values [i] = m_values [i]; 84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project else 86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project _clone.m_values = (int []) m_values.clone (); 88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return _clone; 91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project catch (CloneNotSupportedException e) 93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project throw new InternalError (e.toString ()); 95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public String toString () 99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final StringBuffer s = new StringBuffer (super.toString() + ", size " + m_size + ": "); 101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0; i < m_size; ++ i) 102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (i > 0) s.append (", "); 104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project s.append (m_values [i]); 105f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 106f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 107f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return s.toString (); 108f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 109f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 110f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // MUTATORS: 111f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 112f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public int set (final int index, final int value) 113f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 114f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (index > m_size - 1) 115f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project throw new IndexOutOfBoundsException ("get[" + index + "] on vector of size " + m_size); 116f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 117f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int current_value = m_values [index]; 118f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_values [index] = value; 119f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 120f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return current_value; 121f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 122f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 123f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public void add (final int value) 124f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 125f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int capacity = m_values.length; 126f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (capacity == m_size) 127f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 128f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int [] values = new int [1 + (capacity << 1)]; 129f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project if (capacity < COPY_THRESHOLD) 130f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 131f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0; i < capacity; ++ i) values [i] = m_values [i]; 132f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 133f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project else 134f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 135f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project System.arraycopy (m_values, 0, values, 0, capacity); 136f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 137f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 138f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_values = values; 139f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 140f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 141f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_values [m_size ++] = value; 142f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 143f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 144f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // protected: ............................................................. 145f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 146f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // package: ............................................................... 147f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 148f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // private: ............................................................... 149f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 150f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 151f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private int [] m_values; // never null 152f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private int m_size; 153f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 154f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private static final int COPY_THRESHOLD = 10; 155f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 156f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of class 157f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------