org.jibx.runtime
Class IntStack

java.lang.Object
  extended byorg.jibx.runtime.IntStack

public class IntStack
extends java.lang.Object

Growable int stack with type specific access methods. This implementation is unsynchronized in order to provide the best possible performance for typical usage scenarios, so explicit synchronization must be implemented by a wrapper class or directly by the application in cases where instances are modified in a multithreaded environment. See the base classes for other details of the implementation.

Version:
1.0
Author:
Dennis M. Sosnoski

Field Summary
static int DEFAULT_SIZE
          Default initial array size.
protected  int[] m_baseArray
          The underlying array used for storing the data.
protected  int m_countLimit
          Size of the current array.
protected  int m_countPresent
          The number of values currently present in the stack.
protected  int m_maximumGrowth
          Maximum size increment for growing array.
 
Constructor Summary
IntStack()
          Default constructor.
IntStack(int size)
          Constructor with initial size specified.
IntStack(int[] ints)
          Constructor from array of ints.
IntStack(int size, int growth)
          Constructor with full specification.
IntStack(IntStack base)
          Copy (clone) constructor.
 
Method Summary
 void clear()
          Set the stack to the empty state.
 java.lang.Object clone()
          Duplicates the object with the generic call.
 void ensureCapacity(int min)
          Ensure that the array has the capacity for at least the specified number of values.
private  int getAddIndex()
          Gets the array offset for appending a value to those in the stack.
private  void growArray(int required)
          Increase the size of the array to at least a specified size.
 boolean isEmpty()
          Check if stack is empty.
 int peek()
          Copy top value from the stack.
 int peek(int depth)
          Copy a value from the stack.
 int pop()
          Pop a value from the stack.
 int pop(int count)
          Pop multiple values from the stack.
 void push(int value)
          Push a value on the stack.
private  void resizeCopy(java.lang.Object base, java.lang.Object grown)
          Copy data after array resize.
 int size()
          Get the number of values currently present in the stack.
 int[] toArray()
          Constructs and returns a simple array containing the same data as held in this stack.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_SIZE

public static final int DEFAULT_SIZE
Default initial array size.

See Also:
Constant Field Values

m_countLimit

protected int m_countLimit
Size of the current array.


m_countPresent

protected int m_countPresent
The number of values currently present in the stack.


m_maximumGrowth

protected int m_maximumGrowth
Maximum size increment for growing array.


m_baseArray

protected int[] m_baseArray
The underlying array used for storing the data.

Constructor Detail

IntStack

public IntStack(int size,
                int growth)
Constructor with full specification.

Parameters:
size - number of int values initially allowed in stack
growth - maximum size increment for growing stack

IntStack

public IntStack(int size)
Constructor with initial size specified.

Parameters:
size - number of int values initially allowed in stack

IntStack

public IntStack()
Default constructor.


IntStack

public IntStack(IntStack base)
Copy (clone) constructor.

Parameters:
base - instance being copied

IntStack

public IntStack(int[] ints)
Constructor from array of ints.

Parameters:
ints - array of ints for initial contents
Method Detail

resizeCopy

private void resizeCopy(java.lang.Object base,
                        java.lang.Object grown)
Copy data after array resize. This just copies the entire contents of the old array to the start of the new array. It should be overridden in cases where data needs to be rearranged in the array after a resize.

Parameters:
base - original array containing data
grown - resized array for data

growArray

private void growArray(int required)
Increase the size of the array to at least a specified size. The array will normally be at least doubled in size, but if a maximum size increment was specified in the constructor and the value is less than the current size of the array, the maximum increment will be used instead. If the requested size requires more than the default growth, the requested size overrides the normal growth and determines the size of the replacement array.

Parameters:
required - new minimum size required

ensureCapacity

public final void ensureCapacity(int min)
Ensure that the array has the capacity for at least the specified number of values.

Parameters:
min - minimum capacity to be guaranteed

push

public void push(int value)
Push a value on the stack.

Parameters:
value - value to be added

pop

public int pop()
Pop a value from the stack.

Returns:
value from top of stack
Throws:
java.lang.ArrayIndexOutOfBoundsException - on attempt to pop empty stack

pop

public int pop(int count)
Pop multiple values from the stack. The last value popped is the one returned.

Parameters:
count - number of values to pop from stack (must be strictly positive)
Returns:
value from top of stack
Throws:
java.lang.ArrayIndexOutOfBoundsException - on attempt to pop past end of stack

peek

public int peek(int depth)
Copy a value from the stack. This returns a value from within the stack without modifying the stack.

Parameters:
depth - depth of value to be returned
Returns:
value from stack
Throws:
java.lang.ArrayIndexOutOfBoundsException - on attempt to peek past end of stack

peek

public int peek()
Copy top value from the stack. This returns the top value without removing it from the stack.

Returns:
value at top of stack
Throws:
java.lang.ArrayIndexOutOfBoundsException - on attempt to peek empty stack

toArray

public int[] toArray()
Constructs and returns a simple array containing the same data as held in this stack. Note that the items will be in reverse pop order, with the last item to be popped from the stack as the first item in the array.

Returns:
array containing a copy of the data

clone

public java.lang.Object clone()
Duplicates the object with the generic call.

Returns:
a copy of the object

getAddIndex

private int getAddIndex()
Gets the array offset for appending a value to those in the stack. If the underlying array is full, it is grown by the appropriate size increment so that the index value returned is always valid for the array in use by the time of the return.

Returns:
index position for added element

size

public int size()
Get the number of values currently present in the stack.

Returns:
count of values present

isEmpty

public boolean isEmpty()
Check if stack is empty.

Returns:
true if stack empty, false if not

clear

public void clear()
Set the stack to the empty state.



Project Web Site