package com.limegroup.gnutella.routing;
import org.limewire.collection.BitField;
/**
* Something that stores the hash values contained in a routing table.
*/
interface QRTTableStorage extends BitField, Iterable<Integer> {
/**
* @return number of unused units, -1 if N/A
*/
public int getUnusedUnits();
/**
* @return number of units with specified load, -1 if N/A
*/
public int numUnitsWithLoad(int load);
/**
* @return number of 8-byte memory blocks in use or equivalent
*/
public int getUnitsInUse();
/**
* @return % of units that are set.
*/
public double getPercentFull();
/**
* sets the specified entry as present.
*/
public void set(int hash);
/**
* clears the specified entry as absent
*/
public void clear(int hash);
/**
* optional - compacts the memory representation of this.
*/
public void compact();
/**
* @param newSize the new size we desire.
* @return a new storage with the specified new size.
*/
public QRTTableStorage resize(int newSize);
/**
* @return a clone of this storage.
*/
public QRTTableStorage clone() throws CloneNotSupportedException;
/**
* sets all entries present in other to be present in this as well.
*/
public void or(QRTTableStorage other);
/**
* performs a xor with the other BitField.
*/
public void xor(QRTTableStorage other);
}