/* XXL: The eXtensible and fleXible Library for data processing Copyright (C) 2000-2011 Prof. Dr. Bernhard Seeger Head of the Database Research Group Department of Mathematics and Computer Science University of Marburg Germany This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; If not, see <http://www.gnu.org/licenses/>. http://code.google.com/p/xxl/ */ package xxl.core.collections.containers.recordManager; import java.util.SortedMap; import xxl.core.collections.containers.recordManager.RecordManager.PageInformation; /** * This class provides a append only strategy. Each record * gets its own page if it does not fit into the last record * used. */ public class AppendOnlyStrategy extends AbstractStrategy { /** * Last page which was used. */ protected Object lastPageId; /** * Information about the last page. */ protected PageInformation lastPageInfo; /** * Creates a AppendOnlyStrategy object. */ public AppendOnlyStrategy() { } /** * Finds a block with enough free space to hold the given number * of bytes. * @param bytesRequired The free space needed, in bytes. * @return Id of the Page or null, if no such page exists. */ public Object getPageForRecord(int bytesRequired) { if (lastPageId!=null && lastPageInfo.bytesFreeAfterPossibleReservation(bytesRequired)>=0) return lastPageId; else return null; } /** * @see xxl.core.collections.containers.recordManager.Strategy#pageInserted(java.lang.Object, xxl.core.collections.containers.recordManager.RecordManager.PageInformation) */ public void pageInserted(Object pageId, PageInformation pi) { lastPageId = pageId; lastPageInfo = pi; } /** * @see xxl.core.collections.containers.recordManager.Strategy#pageRemoved(java.lang.Object, xxl.core.collections.containers.recordManager.RecordManager.PageInformation) */ public void pageRemoved(Object pageId, PageInformation pi) { if (pageId.equals(lastPageId)) lastPageId = null; } /** * @see xxl.core.collections.containers.recordManager.Strategy#init(java.util.SortedMap, int, int) */ public void init(SortedMap pages, int pageSize, int maxObjectSize) { super.init(pages, pageSize, maxObjectSize); lastPageId = null; } }