diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/persistent')
22 files changed, 92 insertions, 64 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/persistent/AbstractPage.java b/src/de/lmu/ifi/dbs/elki/persistent/AbstractExternalizablePage.java index 25ed8b7f..194b594f 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/AbstractPage.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/AbstractExternalizablePage.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -31,11 +31,9 @@ import java.io.ObjectOutput; * Abstract superclass for pages. * * @author Elke Achtert - * - * @apiviz.uses PageFile */ // todo elke revise comments -public abstract class AbstractPage implements Page { +public abstract class AbstractExternalizablePage implements ExternalizablePage { /** * Serial version */ @@ -44,7 +42,7 @@ public abstract class AbstractPage implements Page { /** * The unique id if this page. */ - private Integer id; + private int id; /** * The dirty flag of this page. @@ -54,8 +52,9 @@ public abstract class AbstractPage implements Page { /** * Empty constructor for Externalizable interface. */ - public AbstractPage() { + public AbstractExternalizablePage() { super(); + this.id = -1; } /** @@ -64,7 +63,7 @@ public abstract class AbstractPage implements Page { * @return the unique id of this Page */ @Override - public final Integer getPageID() { + public final int getPageID() { return id; } @@ -140,12 +139,7 @@ public abstract class AbstractPage implements Page { */ @Override public String toString() { - if(id != null) { - return Integer.toString(id); - } - else { - return "null"; - } + return Integer.toString(id); } /** @@ -164,9 +158,9 @@ public abstract class AbstractPage implements Page { return false; } - final AbstractPage that = (AbstractPage) o; + final AbstractExternalizablePage that = (AbstractExternalizablePage) o; - return id.equals(that.getPageID()); + return id == that.getPageID(); } /** @@ -176,6 +170,6 @@ public abstract class AbstractPage implements Page { */ @Override public int hashCode() { - return id.hashCode(); + return id; } }
\ No newline at end of file diff --git a/src/de/lmu/ifi/dbs/elki/persistent/AbstractPageFile.java b/src/de/lmu/ifi/dbs/elki/persistent/AbstractPageFile.java index 54aa7e39..e05c20c3 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/AbstractPageFile.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/AbstractPageFile.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -61,7 +61,7 @@ public abstract class AbstractPageFile<P extends Page> implements PageFile<P> { */ @Override public final synchronized int writePage(P page) { - Integer pageid = setPageID(page); + int pageid = setPageID(page); writePage(pageid, page); return pageid; } @@ -72,7 +72,7 @@ public abstract class AbstractPageFile<P extends Page> implements PageFile<P> { * @param pageid Page id * @param page Page to write */ - protected abstract void writePage(Integer pageid, P page); + protected abstract void writePage(int pageid, P page); @Override public void close() { diff --git a/src/de/lmu/ifi/dbs/elki/persistent/AbstractStoringPageFile.java b/src/de/lmu/ifi/dbs/elki/persistent/AbstractStoringPageFile.java index bb4e915d..7151e6dd 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/AbstractStoringPageFile.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/AbstractStoringPageFile.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -67,11 +67,11 @@ public abstract class AbstractStoringPageFile<P extends Page> extends AbstractPa * @param page the page to set the id */ @Override - public Integer setPageID(P page) { - Integer pageID = page.getPageID(); - if(pageID == null) { + public int setPageID(P page) { + int pageID = page.getPageID(); + if(pageID == -1) { pageID = getNextEmptyPageID(); - if(pageID == null) { + if(pageID == -1) { pageID = nextPageID++; } page.setPageID(pageID); @@ -95,12 +95,12 @@ public abstract class AbstractStoringPageFile<P extends Page> extends AbstractPa * * @return the next empty page id */ - private Integer getNextEmptyPageID() { + private int getNextEmptyPageID() { if(!emptyPages.empty()) { return emptyPages.pop(); } else { - return null; + return -1; } } diff --git a/src/de/lmu/ifi/dbs/elki/persistent/ByteArrayUtil.java b/src/de/lmu/ifi/dbs/elki/persistent/ByteArrayUtil.java index f4959167..42466558 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/ByteArrayUtil.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/ByteArrayUtil.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferInputStream.java b/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferInputStream.java index 3fd7b35f..586d5535 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferInputStream.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferInputStream.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferOutputStream.java b/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferOutputStream.java index 6c6c5c43..2a2971d9 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferOutputStream.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferOutputStream.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferSerializer.java b/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferSerializer.java index 0a9403ac..e10a365d 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferSerializer.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/ByteBufferSerializer.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/persistent/DefaultPageHeader.java b/src/de/lmu/ifi/dbs/elki/persistent/DefaultPageHeader.java index e2be5aaf..e1ca2a41 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/DefaultPageHeader.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/DefaultPageHeader.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/persistent/ExternalizablePage.java b/src/de/lmu/ifi/dbs/elki/persistent/ExternalizablePage.java new file mode 100644 index 00000000..703187ac --- /dev/null +++ b/src/de/lmu/ifi/dbs/elki/persistent/ExternalizablePage.java @@ -0,0 +1,36 @@ +package de.lmu.ifi.dbs.elki.persistent; + +import java.io.Externalizable; + +/* + This file is part of ELKI: + Environment for Developing KDD-Applications Supported by Index-Structures + + Copyright (C) 2012 + Ludwig-Maximilians-Universität München + Lehr- und Forschungseinheit für Datenbanksysteme + ELKI Development Team + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/** + * Base interface for externalizable pages. + * + * @author Erich Schubert + */ +// TODO: replace with the newer ByteSerializers +public interface ExternalizablePage extends Page, Externalizable { + // Empty +} diff --git a/src/de/lmu/ifi/dbs/elki/persistent/FixedSizeByteBufferSerializer.java b/src/de/lmu/ifi/dbs/elki/persistent/FixedSizeByteBufferSerializer.java index d68ac994..56f1f9b3 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/FixedSizeByteBufferSerializer.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/FixedSizeByteBufferSerializer.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/persistent/LRUCache.java b/src/de/lmu/ifi/dbs/elki/persistent/LRUCache.java index e93924f0..3b6f67dc 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/LRUCache.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/LRUCache.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -111,7 +111,7 @@ public class LRUCache<P extends Page> extends AbstractPageFile<P> { } @Override - public synchronized void writePage(Integer pageID, P page) { + public synchronized void writePage(int pageID, P page) { writeAccess++; page.setDirty(true); map.put(pageID, page); @@ -142,8 +142,8 @@ public class LRUCache<P extends Page> extends AbstractPageFile<P> { } @Override - public Integer setPageID(P page) { - Integer pageID = file.setPageID(page); + public int setPageID(P page) { + int pageID = file.setPageID(page); return pageID; } diff --git a/src/de/lmu/ifi/dbs/elki/persistent/MemoryPageFile.java b/src/de/lmu/ifi/dbs/elki/persistent/MemoryPageFile.java index 13e3ec04..7aba9a21 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/MemoryPageFile.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/MemoryPageFile.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -23,8 +23,8 @@ package de.lmu.ifi.dbs.elki.persistent; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import java.util.HashMap; -import java.util.Map; +import gnu.trove.map.TIntObjectMap; +import gnu.trove.map.hash.TIntObjectHashMap; /** * A memory based implementation of a PageFile that simulates I/O-access.<br> @@ -38,7 +38,7 @@ public class MemoryPageFile<P extends Page> extends AbstractStoringPageFile<P> { /** * Holds the pages. */ - private final Map<Integer, P> file; + private final TIntObjectMap<P> file; /** * Creates a new MemoryPageFile that is supported by a cache with the @@ -48,7 +48,7 @@ public class MemoryPageFile<P extends Page> extends AbstractStoringPageFile<P> { */ public MemoryPageFile(int pageSize) { super(pageSize); - this.file = new HashMap<Integer, P>(); + this.file = new TIntObjectHashMap<P>(); } @Override @@ -58,7 +58,7 @@ public class MemoryPageFile<P extends Page> extends AbstractStoringPageFile<P> { } @Override - protected void writePage(Integer pageID, P page) { + protected void writePage(int pageID, P page) { writeAccess++; file.put(pageID, page); page.setDirty(false); diff --git a/src/de/lmu/ifi/dbs/elki/persistent/OnDiskArray.java b/src/de/lmu/ifi/dbs/elki/persistent/OnDiskArray.java index 2290398c..7c62173d 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/OnDiskArray.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/OnDiskArray.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -129,8 +129,8 @@ public class OnDiskArray implements Serializable { this.filename = filename; this.writable = true; - // do not allow overwriting. - if(filename.exists()) { + // do not allow overwriting, unless empty + if(filename.exists() && filename.length() > 0) { throw new IOException(ExceptionMessages.FILE_EXISTS); } diff --git a/src/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFile.java b/src/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFile.java index d7a546fe..37a16384 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFile.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/OnDiskArrayPageFile.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -139,7 +139,7 @@ public class OnDiskArrayPageFile<P extends Page> extends AbstractStoringPageFile * @param page the page which has to be written to disk */ @Override - public void writePage(Integer pageID, P page) { + public void writePage(int pageID, P page) { if(page.isDirty()) { try { writeAccess++; diff --git a/src/de/lmu/ifi/dbs/elki/persistent/OnDiskUpperTriangleMatrix.java b/src/de/lmu/ifi/dbs/elki/persistent/OnDiskUpperTriangleMatrix.java index 6d38348a..638d85cd 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/OnDiskUpperTriangleMatrix.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/OnDiskUpperTriangleMatrix.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/persistent/Page.java b/src/de/lmu/ifi/dbs/elki/persistent/Page.java index d296a840..2c3fb252 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/Page.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/Page.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -23,21 +23,19 @@ package de.lmu.ifi.dbs.elki.persistent; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import java.io.Externalizable; - /** * Defines the requirements for objects that can be stored in a cache and can be * persistently saved. * * @author Elke Achtert */ -public interface Page extends Externalizable { +public interface Page { /** * Returns the unique id of this Page. * - * @return the unique id of this Page. May be {@code null}. + * @return the unique id of this Page. Return -1 for unassigned page numbers. */ - Integer getPageID(); + int getPageID(); /** * Sets the unique id of this Page. diff --git a/src/de/lmu/ifi/dbs/elki/persistent/PageFile.java b/src/de/lmu/ifi/dbs/elki/persistent/PageFile.java index a65fabeb..f50e829e 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/PageFile.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/PageFile.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -38,7 +38,7 @@ public interface PageFile<P extends Page> extends PageFileStatistics { * @param page the page to set the id * @return the page id */ - public Integer setPageID(P page); + public int setPageID(P page); /** * Writes a page into this file. The method tests if the page has already an diff --git a/src/de/lmu/ifi/dbs/elki/persistent/PageFileStatistics.java b/src/de/lmu/ifi/dbs/elki/persistent/PageFileStatistics.java index 2f2bd821..df3de612 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/PageFileStatistics.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/PageFileStatistics.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/persistent/PageFileUtil.java b/src/de/lmu/ifi/dbs/elki/persistent/PageFileUtil.java index 6a0dbb92..5fe11432 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/PageFileUtil.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/PageFileUtil.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/persistent/PageHeader.java b/src/de/lmu/ifi/dbs/elki/persistent/PageHeader.java index 911e81c2..70a31190 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/PageHeader.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/PageHeader.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/persistent/PersistentPageFile.java b/src/de/lmu/ifi/dbs/elki/persistent/PersistentPageFile.java index b40e56f5..618707a5 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/PersistentPageFile.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/PersistentPageFile.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.persistent; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2011 + Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -47,7 +47,7 @@ import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; * * @param <P> Page type */ -public class PersistentPageFile<P extends Page> extends AbstractStoringPageFile<P> { +public class PersistentPageFile<P extends ExternalizablePage> extends AbstractStoringPageFile<P> { /** * Our logger */ @@ -156,7 +156,7 @@ public class PersistentPageFile<P extends Page> extends AbstractStoringPageFile< * @param page the page which has to be written to disk */ @Override - public void writePage(Integer pageID, P page) { + public void writePage(int pageID, P page) { try { writeAccess++; byte[] array = pageToByteArray(page); @@ -167,7 +167,7 @@ public class PersistentPageFile<P extends Page> extends AbstractStoringPageFile< page.setDirty(false); } catch(IOException e) { - throw new RuntimeException(e); + throw new RuntimeException("Error writing to page file.", e); } } diff --git a/src/de/lmu/ifi/dbs/elki/persistent/package-info.java b/src/de/lmu/ifi/dbs/elki/persistent/package-info.java index ce083c88..c2d8614c 100644 --- a/src/de/lmu/ifi/dbs/elki/persistent/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/persistent/package-info.java @@ -5,7 +5,7 @@ This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures -Copyright (C) 2011 +Copyright (C) 2012 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team |