Mega Code Archive

 
Categories / Java / Collections Data Structure
 

Stack for boolean values

/*  * 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 $  */ /**  * Simple stack for boolean values.  * @xsl.usage internal  */ public final class BoolStack implements Cloneable {   /** Array of boolean values          */   private boolean m_values[];   /** Array size allocated           */   private int m_allocatedSize;   /** Index into the array of booleans          */   private int m_index;   /**    * 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.    *    * @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.    *    * @return Current length of the list    */   public final int size()   {     return m_index + 1;   }   /**    * Clears the stack.    *    */   public final void clear()   {     m_index = -1;   }   /**    * 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.    *    * @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.    *    *    * @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      *    *    * @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.    *    * @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.    *    * @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.    *    * @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.    *    * @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    *    */   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();   } }