KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > vladium > util > IntVector


1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
2  *
3  * This program and the accompanying materials are made available under
4  * the terms of the Common Public License v1.0 which accompanies this distribution,
5  * and is available at http://www.eclipse.org/legal/cpl-v10.html
6  *
7  * $Id: IntVector.java,v 1.1.1.1 2004/05/09 16:57:53 vlad_r Exp $
8  */

9 package com.vladium.util;
10
11 // ----------------------------------------------------------------------------
12
/**
13  * @author Vlad Roubtsov, (C) 2001
14  */

15 public
16 final class IntVector implements Cloneable JavaDoc
17 {
18     // public: ................................................................
19

20     public IntVector ()
21     {
22         this (5);
23     }
24     
25     public IntVector (final int initCapacity)
26     {
27         m_values = new int [initCapacity];
28     }
29     
30     // ACCESSORS:
31

32     public int get (final int index)
33     {
34         if (index > m_size - 1)
35             throw new IndexOutOfBoundsException JavaDoc ("get[" + index + "] on vector of size " + m_size);
36                 
37         return m_values [index];
38     }
39     
40     public int [] values ()
41     {
42         if (m_size == 0)
43             return IConstants.EMPTY_INT_ARRAY;
44         else
45         {
46             final int size = m_size;
47             final int [] result = new int [size];
48             
49             if (size < COPY_THRESHOLD)
50             {
51                 for (int i = 0; i < size; ++ i) result [i] = m_values [i];
52             }
53             else
54             {
55                 System.arraycopy (m_values, 0, result, 0, size);
56             }
57             
58             return result;
59         }
60     }
61     
62     public int size ()
63     {
64         return m_size;
65     }
66     
67     // Cloneable:
68

69     /**
70      * Performs deep copy.
71      */

72     public Object JavaDoc clone ()
73     {
74         try
75         {
76             final IntVector _clone = (IntVector) super.clone ();
77             
78             // deep clone:
79
if (m_size < COPY_THRESHOLD)
80             {
81                 _clone.m_values = new int [m_values.length];
82                 final int [] _clone_values = _clone.m_values;
83                 for (int i = 0; i < m_size; ++ i) _clone_values [i] = m_values [i];
84             }
85             else
86             {
87                 _clone.m_values = (int []) m_values.clone ();
88             }
89             
90             return _clone;
91         }
92         catch (CloneNotSupportedException JavaDoc e)
93         {
94             throw new InternalError JavaDoc (e.toString ());
95         }
96     }
97     
98     public String JavaDoc toString ()
99     {
100         final StringBuffer JavaDoc s = new StringBuffer JavaDoc (super.toString() + ", size " + m_size + ": ");
101         for (int i = 0; i < m_size; ++ i)
102         {
103             if (i > 0) s.append (", ");
104             s.append (m_values [i]);
105         }
106         
107         return s.toString ();
108     }
109     
110     // MUTATORS:
111

112     public int set (final int index, final int value)
113     {
114         if (index > m_size - 1)
115             throw new IndexOutOfBoundsException JavaDoc ("get[" + index + "] on vector of size " + m_size);
116         
117         final int current_value = m_values [index];
118         m_values [index] = value;
119         
120         return current_value;
121     }
122     
123     public void add (final int value)
124     {
125         final int capacity = m_values.length;
126         if (capacity == m_size)
127         {
128             final int [] values = new int [1 + (capacity << 1)];
129             if (capacity < COPY_THRESHOLD)
130             {
131                 for (int i = 0; i < capacity; ++ i) values [i] = m_values [i];
132             }
133             else
134             {
135                 System.arraycopy (m_values, 0, values, 0, capacity);
136             }
137             
138             m_values = values;
139         }
140         
141         m_values [m_size ++] = value;
142     }
143     
144     // protected: .............................................................
145

146     // package: ...............................................................
147

148     // private: ...............................................................
149

150     
151     private int [] m_values; // never null
152
private int m_size;
153     
154     private static final int COPY_THRESHOLD = 10;
155
156 } // end of class
157
// ----------------------------------------------------------------------------
Popular Tags