FileDocCategorySizeDatePackage
IntVector.javaAPI DocJava SE 5 API9781Fri Aug 26 14:56:04 BST 2005com.sun.org.apache.xml.internal.utils

IntVector

public class IntVector extends Object implements Cloneable
A very simple table that stores a list of int. This version is based on a "realloc" strategy -- a simle array is used, and when more storage is needed, a larger array is obtained and all existing data is recopied into it. As a result, read/write access to existing nodes is O(1) fast but appending may be O(N**2) slow. See also SuballocatedIntVector.
xsl.usage
internal

Fields Summary
protected int
m_blocksize
Size of blocks to allocate
protected int[]
m_map
Array of ints
protected int
m_firstFree
Number of ints in array
protected int
m_mapSize
Size of array
Constructors Summary
public IntVector()
Default constructor. Note that the default block size is very small, for small lists.


                    
   
  

    m_blocksize = 32;
    m_mapSize = m_blocksize;
    m_map = new int[m_blocksize];
  
public IntVector(int blocksize)
Construct a IntVector, using the given block size.

param
blocksize Size of block to allocate


    m_blocksize = blocksize;
    m_mapSize = blocksize;
    m_map = new int[blocksize];
  
public IntVector(int blocksize, int increaseSize)
Construct a IntVector, using the given block size.

param
blocksize Size of block to allocate


    m_blocksize = increaseSize;
    m_mapSize = blocksize;
    m_map = new int[blocksize];
  
public IntVector(IntVector v)
Copy constructor for IntVector

param
v Existing IntVector to copy

  	m_map = new int[v.m_mapSize];
    m_mapSize = v.m_mapSize;
    m_firstFree = v.m_firstFree;
  	m_blocksize = v.m_blocksize;
  	System.arraycopy(v.m_map, 0, m_map, 0, m_firstFree);
  
Methods Summary
public final voidaddElement(int value)
Append a int onto the vector.

param
value Int to add to the list


    if ((m_firstFree + 1) >= m_mapSize)
    {
      m_mapSize += m_blocksize;

      int newMap[] = new int[m_mapSize];

      System.arraycopy(m_map, 0, newMap, 0, m_firstFree + 1);

      m_map = newMap;
    }

    m_map[m_firstFree] = value;

    m_firstFree++;
  
public final voidaddElements(int value, int numberOfElements)
Append several int values onto the vector.

param
value Int to add to the list


    if ((m_firstFree + numberOfElements) >= m_mapSize)
    {
      m_mapSize += (m_blocksize+numberOfElements);

      int newMap[] = new int[m_mapSize];

      System.arraycopy(m_map, 0, newMap, 0, m_firstFree + 1);

      m_map = newMap;
    }

    for (int i = 0; i < numberOfElements; i++) 
    {
      m_map[m_firstFree] = value;
      m_firstFree++;
    }
  
public final voidaddElements(int numberOfElements)
Append several slots onto the vector, but do not set the values.

param
value Int to add to the list


    if ((m_firstFree + numberOfElements) >= m_mapSize)
    {
      m_mapSize += (m_blocksize+numberOfElements);

      int newMap[] = new int[m_mapSize];

      System.arraycopy(m_map, 0, newMap, 0, m_firstFree + 1);

      m_map = newMap;
    }
    
    m_firstFree += numberOfElements;
  
public java.lang.Objectclone()
Returns clone of current IntVector

return
clone of current IntVector

  	return new IntVector(this);
  
public final booleancontains(int s)
Tell if the table contains the given node.

param
s object to look for
return
true if the object is in the list


    for (int i = 0; i < m_firstFree; i++)
    {
      if (m_map[i] == s)
        return true;
    }

    return false;
  
public final intelementAt(int i)
Get the nth element.

param
i index of object to get
return
object at given index

    return m_map[i];
  
public final intindexOf(int elem, int index)
Searches for the first occurence of the given argument, beginning the search at index, and testing for equality using the equals method.

param
elem object to look for
param
index Index of where to begin search
return
the index of the first occurrence of the object argument in this vector at position index or later in the vector; returns -1 if the object is not found.


    for (int i = index; i < m_firstFree; i++)
    {
      if (m_map[i] == elem)
        return i;
    }

    return java.lang.Integer.MIN_VALUE;
  
public final intindexOf(int elem)
Searches for the first occurence of the given argument, beginning the search at index, and testing for equality using the equals method.

param
elem object to look for
return
the index of the first occurrence of the object argument in this vector at position index or later in the vector; returns -1 if the object is not found.


    for (int i = 0; i < m_firstFree; i++)
    {
      if (m_map[i] == elem)
        return i;
    }

    return java.lang.Integer.MIN_VALUE;
  
public final voidinsertElementAt(int value, int at)
Inserts the specified node in this vector at the specified index. Each component in this vector with an index greater or equal to the specified index is shifted upward to have an index one greater than the value it had previously.

param
value Int to insert
param
at Index of where to insert


    if ((m_firstFree + 1) >= m_mapSize)
    {
      m_mapSize += m_blocksize;

      int newMap[] = new int[m_mapSize];

      System.arraycopy(m_map, 0, newMap, 0, m_firstFree + 1);

      m_map = newMap;
    }

    if (at <= (m_firstFree - 1))
    {
      System.arraycopy(m_map, at, m_map, at + 1, m_firstFree - at);
    }

    m_map[at] = value;

    m_firstFree++;
  
public final intlastIndexOf(int elem)
Searches for the first occurence of the given argument, beginning the search at index, and testing for equality using the equals method.

param
elem Object to look for
return
the index of the first occurrence of the object argument in this vector at position index or later in the vector; returns -1 if the object is not found.


    for (int i = (m_firstFree - 1); i >= 0; i--)
    {
      if (m_map[i] == elem)
        return i;
    }

    return java.lang.Integer.MIN_VALUE;
  
public final voidremoveAllElements()
Inserts the specified node in this vector at the specified index. Each component in this vector with an index greater or equal to the specified index is shifted upward to have an index one greater than the value it had previously.


    for (int i = 0; i < m_firstFree; i++)
    {
      m_map[i] = java.lang.Integer.MIN_VALUE;
    }

    m_firstFree = 0;
  
public final booleanremoveElement(int s)
Removes the first occurrence of the argument from this vector. If the object is found in this vector, each component in the vector with an index greater or equal to the object's index is shifted downward to have an index one smaller than the value it had previously.

param
s Int to remove from array
return
True if the int was removed, false if it was not found


    for (int i = 0; i < m_firstFree; i++)
    {
      if (m_map[i] == s)
      {
        if ((i + 1) < m_firstFree)
          System.arraycopy(m_map, i + 1, m_map, i - 1, m_firstFree - i);
        else
          m_map[i] = java.lang.Integer.MIN_VALUE;

        m_firstFree--;

        return true;
      }
    }

    return false;
  
public final voidremoveElementAt(int i)
Deletes the component at the specified index. Each component in this vector with an index greater or equal to the specified index is shifted downward to have an index one smaller than the value it had previously.

param
i index of where to remove and int


    if (i > m_firstFree)
      System.arraycopy(m_map, i + 1, m_map, i, m_firstFree);
    else
      m_map[i] = java.lang.Integer.MIN_VALUE;

    m_firstFree--;
  
public final voidsetElementAt(int value, int index)
Sets the component at the specified index of this vector to be the specified object. The previous component at that position is discarded. The index must be a value greater than or equal to 0 and less than the current size of the vector.

param
node object to set
param
index Index of where to set the object

    m_map[index] = value;
  
public final voidsetSize(int sz)
Get the length of the list.

return
length of the list

    m_firstFree = sz;
  
public final intsize()
Get the length of the list.

return
length of the list

    return m_firstFree;