001 //$HeadURL: svn+ssh://rbezema@svn.wald.intevation.org/deegree/base/tags/2.1/src/org/deegree/io/rtree/MemoryPageFile.java $
002 //
003 //RTree implementation.
004 //Copyright (C) 2002-2004 Wolfgang Baer - WBaer@gmx.de
005 //
006 //This library is free software; you can redistribute it and/or
007 //modify it under the terms of the GNU Lesser General Public
008 //License as published by the Free Software Foundation; either
009 //version 2.1 of the License, or (at your option) any later version.
010 //
011 //This library is distributed in the hope that it will be useful,
012 //but WITHOUT ANY WARRANTY; without even the implied warranty of
013 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 //Lesser General Public License for more details.
015 //
016 //You should have received a copy of the GNU Lesser General Public
017 //License along with this library; if not, write to the Free Software
018 //Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019
020 package org.deegree.io.rtree;
021
022 import java.io.Serializable;
023 import java.util.Hashtable;
024
025 /**
026 * <p>
027 * A memory based implementation of a PageFile.<br>
028 * Implemented as a Hashtable with keys representing the page file numbers of the saved nodes.
029 * </p>
030 *
031 * @author Wolfgang Baer - WBaer@gmx.de
032 */
033 class MemoryPageFile extends PageFile implements Serializable {
034
035 private Hashtable<Integer, Node> file = new Hashtable<Integer, Node>( 500 );
036
037 /**
038 * Constructor
039 */
040 protected MemoryPageFile() {
041 super();
042 file.clear();
043 }
044
045 /**
046 * @see PageFile#readNode(int)
047 */
048 protected Node readNode( int pageFile )
049 throws PageFileException {
050 return file.get( new Integer( pageFile ) );
051 }
052
053 /**
054 * @see PageFile#writeNode(Node)
055 */
056 protected int writeNode( Node node )
057 throws PageFileException {
058
059 int i = 0;
060 if ( node.getPageNumber() < 0 ) {
061 while ( true ) {
062 if ( !file.containsKey( new Integer( i ) ) ) {
063 break;
064 }
065 i++;
066 }
067 node.setPageNumber( i );
068 } else
069 i = node.getPageNumber();
070
071 file.put( new Integer( i ), node );
072
073 return i;
074 }
075
076 /**
077 * @see PageFile#deleteNode(int)
078 */
079 protected Node deleteNode( int pageNumber ) {
080 return file.remove( new Integer( pageNumber ) );
081 }
082
083 /**
084 * @see PageFile#close()
085 */
086 protected void close()
087 throws PageFileException {
088 // nothing to do
089 }
090 }