/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the  "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
 * $Id: BoolStack.java 468655 2006-10-28 07:12:06Z minchau $
 */
package org.apache.xml.utils;


Simple stack for boolean values.
@xsl.usageinternal
/** * Simple stack for boolean values. * @xsl.usage internal */
public final class BoolStack implements Cloneable {
Array of boolean values
/** Array of boolean values */
private boolean m_values[];
Array size allocated
/** Array size allocated */
private int m_allocatedSize;
Index into the array of booleans
/** Index into the array of booleans */
private int m_index;
Default constructor. Note that the default block size is very small, for small lists.
/** * Default constructor. Note that the default * block size is very small, for small lists. */
public BoolStack() { this(32); }
Construct a IntVector, using the given block size.
Params:
  • size – array size to allocate
/** * Construct a IntVector, using the given block size. * * @param size array size to allocate */
public BoolStack(int size) { m_allocatedSize = size; m_values = new boolean[size]; m_index = -1; }
Get the length of the list.
Returns:Current length of the list
/** * Get the length of the list. * * @return Current length of the list */
public final int size() { return m_index + 1; }
Clears the stack.
/** * Clears the stack. * */
public final void clear() { m_index = -1; }
Pushes an item onto the top of this stack.
Params:
  • val – the boolean to be pushed onto this stack.
Returns: the item argument.
/** * Pushes an item onto the top of this stack. * * * @param val the boolean to be pushed onto this stack. * @return the <code>item</code> argument. */
public final boolean push(boolean val) { if (m_index == m_allocatedSize - 1) grow(); return (m_values[++m_index] = val); }
Removes the object at the top of this stack and returns that object as the value of this function.
Throws:
  • EmptyStackException – if this stack is empty.
Returns: The object at the top of this stack.
/** * Removes the object at the top of this stack and returns that * object as the value of this function. * * @return The object at the top of this stack. * @throws EmptyStackException if this stack is empty. */
public final boolean pop() { return m_values[m_index--]; }
Removes the object at the top of this stack and returns the next object at the top as the value of this function.
Returns:Next object to the top or false if none there
/** * Removes the object at the top of this stack and returns the * next object at the top as the value of this function. * * * @return Next object to the top or false if none there */
public final boolean popAndTop() { m_index--; return (m_index >= 0) ? m_values[m_index] : false; }
Set the item at the top of this stack
Params:
  • b – Object to set at the top of this stack
/** * Set the item at the top of this stack * * * @param b Object to set at the top of this stack */
public final void setTop(boolean b) { m_values[m_index] = b; }
Looks at the object at the top of this stack without removing it from the stack.
Throws:
  • EmptyStackException – if this stack is empty.
Returns: the object at the top of this stack.
/** * Looks at the object at the top of this stack without removing it * from the stack. * * @return the object at the top of this stack. * @throws EmptyStackException if this stack is empty. */
public final boolean peek() { return m_values[m_index]; }
Looks at the object at the top of this stack without removing it from the stack. If the stack is empty, it returns false.
Returns: the object at the top of this stack.
/** * Looks at the object at the top of this stack without removing it * from the stack. If the stack is empty, it returns false. * * @return the object at the top of this stack. */
public final boolean peekOrFalse() { return (m_index > -1) ? m_values[m_index] : false; }
Looks at the object at the top of this stack without removing it from the stack. If the stack is empty, it returns true.
Returns: the object at the top of this stack.
/** * Looks at the object at the top of this stack without removing it * from the stack. If the stack is empty, it returns true. * * @return the object at the top of this stack. */
public final boolean peekOrTrue() { return (m_index > -1) ? m_values[m_index] : true; }
Tests if this stack is empty.
Returns: true if this stack is empty; false otherwise.
/** * Tests if this stack is empty. * * @return <code>true</code> if this stack is empty; * <code>false</code> otherwise. */
public boolean isEmpty() { return (m_index == -1); }
Grows the size of the stack
/** * Grows the size of the stack * */
private void grow() { m_allocatedSize *= 2; boolean newVector[] = new boolean[m_allocatedSize]; System.arraycopy(m_values, 0, newVector, 0, m_index + 1); m_values = newVector; } public Object clone() throws CloneNotSupportedException { return super.clone(); } }