package com.sleepycat.je.tree; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import com.sleepycat.je.dbi.DatabaseId; import de.ovgu.cide.jakutil.*; /** * A class that embodies a reference to a BIN that does not rely on a * Java reference to the actual BIN. */ public class BINReference { protected byte[] idKey; private long nodeId; private DatabaseId databaseId; private Set deletedKeys; BINReference( long nodeId, DatabaseId databaseId, byte[] idKey){ this.nodeId=nodeId; this.databaseId=databaseId; this.idKey=idKey; } public long getNodeId(){ return nodeId; } public DatabaseId getDatabaseId(){ return databaseId; } public byte[] getKey(){ return idKey; } public byte[] getData(){ return null; } public void addDeletedKey( Key key){ if (deletedKeys == null) { deletedKeys=new HashSet(); } deletedKeys.add(key); } public void addDeletedKeys( BINReference other){ if (deletedKeys == null) { deletedKeys=new HashSet(); } if (other.deletedKeys != null) { deletedKeys.addAll(other.deletedKeys); } } public void removeDeletedKey( Key key){ if (deletedKeys != null) { deletedKeys.remove(key); if (deletedKeys.size() == 0) { deletedKeys=null; } } } public boolean hasDeletedKey( Key key){ return (deletedKeys != null) && deletedKeys.contains(key); } public boolean deletedKeysExist(){ return ((deletedKeys != null) && (deletedKeys.size() > 0)); } public Iterator getDeletedKeyIterator(){ if (deletedKeys != null) { return deletedKeys.iterator(); } else { return null; } } /** * Compare two BINReferences. */ public boolean equals( Object obj){ if (this == obj) { return true; } if (!(obj instanceof BINReference)) { return false; } return ((BINReference)obj).nodeId == nodeId; } public int hashCode(){ return (int)nodeId; } public String toString(){ return "idKey=" + Key.getNoFormatString(idKey) + " nodeId = "+ nodeId+ " db="+ databaseId+ " deletedKeys="+ deletedKeys; } }