1 /* Copyright (c) 2001-2005, The HSQL Development Group 2 * All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are met: 6 * 7 * Redistributions of source code must retain the above copyright notice, this 8 * list of conditions and the following disclaimer. 9 * 10 * Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 14 * Neither the name of the HSQL Development Group nor the names of its 15 * contributors may be used to endorse or promote products derived from this 16 * software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG, 22 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 32 package org.hsqldb.lib; 33 34 /** 35 * Provides the base HSQLDB interface for Heap ADT implementations. <p> 36 * 37 * In this context, a Heap is simply a collection-like ADT that allows addition 38 * of elements and provides a way to remove the least element, given some 39 * implementation-dependent strategy for imposing an order over its 40 * elements. <p> 41 * 42 * Typically, an HsqlHeap will be implemented as a tree-like structure that 43 * recursively guarantees a <i>Heap Invariant</i>, such that all nodes below 44 * the root are greater than the root, given some comparison stragegy. <p> 45 46 * This in turn provides the basis for an efficient implementation of ADTs such 47 * PriorityQueue, since Heap operations using the typical implementation are, 48 * in theory, guaranteed to be O(log n). 49 * 50 * @author boucherb@users 51 * @version 1.7.2 52 * @since 1.7.2 53 */ 54 public interface HsqlHeap { 55 56 /** 57 * Removes all of the elements from this Heap. 58 */ 59 void clear(); 60 61 /** 62 * Retrieves whether this Heap is empty. 63 */ 64 boolean isEmpty(); 65 66 /** 67 * Retrieves whether this Heap is full. 68 */ 69 boolean isFull(); 70 71 /** 72 * Adds the specified element to this Heap. 73 * 74 * @param o The element to add 75 * @throws IllegalArgumentException if the implementation does 76 * not accept elements of the supplied type (optional) 77 * throws RuntimeException if the implementation 78 * dictates that this Heap is not currently accepting additions 79 * or that this Heap is currently full (optional) 80 */ 81 void add(Object o) throws IllegalArgumentException, RuntimeException; 82 83 /** 84 * Retrieves the least element from this Heap, without removing it. 85 * 86 * @return the least element from this Heap 87 */ 88 Object peek(); 89 90 /** 91 * Retrieves the least element from this Heap, removing it in the process. 92 * 93 * @return the least element from this Heap 94 */ 95 Object remove(); 96 97 /** 98 * Retrieves the number of elements currently in this Heap. 99 * 100 * @return the number of elements currently in this Heap 101 */ 102 int size(); 103 } 104