/** * Index * Copyright 2005 by Michael Peter Christen; mc@yacy.net, Frankfurt a. M., Germany * First released 26.10.2005 at http://yacy.net * * $LastChangedDate$ * $LastChangedRevision$ * $LastChangedBy$ * * 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 2.1 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 program in the file lgpl21.txt * If not, see <http://www.gnu.org/licenses/>. */ package net.yacy.kelondro.index; import java.io.IOException; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import net.yacy.cora.order.CloneableIterator; import net.yacy.cora.util.SpaceExceededException; public interface Index extends Iterable<Row.Entry> { public String filename(); // returns a unique identified for this index; can be a real or artificial file name public int size(); public void optimize(); public long mem(); public boolean isEmpty(); public Row row(); public byte[] smallestKey(); public byte[] largestKey(); public boolean has(byte[] key); // use this only if there is no get in case that has returns true public Map<byte[], Row.Entry> get(final Collection<byte[]> keys, boolean forcecopy) throws IOException, InterruptedException; public Row.Entry get(byte[] key, boolean forcecopy) throws IOException; public Row.Entry replace(Row.Entry row) throws SpaceExceededException, IOException; /** * Adds the row to the index. The row is identified by the primary key of the row. * @param row a index row * @return true if this set did _not_ already contain the given row. * @throws IOException * @throws SpaceExceededException */ public boolean put(Row.Entry row) throws IOException, SpaceExceededException; public void addUnique(Row.Entry row) throws SpaceExceededException, IOException; // no double-check public List<RowCollection> removeDoubles() throws IOException, SpaceExceededException; // removes all elements that are double (to be used after all addUnique) public boolean delete(byte[] key) throws IOException; public Row.Entry remove(byte[] key) throws IOException; public Row.Entry removeOne() throws IOException; public List<Row.Entry> top(int count) throws IOException; public List<Row.Entry> random(int count) throws IOException; public CloneableIterator<byte[]> keys(boolean up, byte[] firstKey) throws IOException; // iterates only the key public CloneableIterator<Row.Entry> rows(boolean up, byte[] firstKey) throws IOException; // iterates the whole row using the order of the keys public CloneableIterator<Row.Entry> rows() throws IOException; // iterates the whole row without any order @Override public Iterator<Row.Entry> iterator(); public void deleteOnExit(); public void clear() throws IOException; public void close(); }