001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.fusesource.hawtdb.api;
018    
019    import org.fusesource.hawtdb.internal.util.Ranges;
020    
021    /**
022     * Handles allocation management of resources.  Used for page allocations
023     * in a {@link Paged} resource.
024     * 
025     * @author <a href="http://hiramchirino.com">Hiram Chirino</a>
026     */
027    public interface Allocator { 
028    
029        /**
030         * Allocates a continuous number of items and returns the position of first item in the sequence.
031         */
032        public int alloc(int count) throws OutOfSpaceException;
033    
034        /**
035         * Frees a given number of items at a given position.
036         */
037        public void free(int firstPage, int count);
038    
039        /**
040         * Undoes a previous free method call.
041         * 
042         * optional method. implementations my throw UnsupportedOperationException
043         * @throws UnsupportedOperationException may be thrown by some allocators.
044         */
045        public void unfree(int firstPage, int count) throws UnsupportedOperationException;
046    
047        /**
048         * Frees all previous allocations.
049         * 
050         * optional method. implementations my throw UnsupportedOperationException
051         * @throws UnsupportedOperationException 
052         */
053        public void clear() throws UnsupportedOperationException;
054    
055        /**
056         * @return the maximum number of pages that this allocator will allocate.
057         */
058        public int getLimit();
059    
060        /**
061         * @param page
062         * @return true if the page has been allocated.
063         */
064        public boolean isAllocated(int page);
065    
066        /**
067         * 
068         */
069        public void setFreeRanges(Ranges freeList);
070    
071        /**
072         *
073         */
074        public Ranges getFreeRanges();
075    }