package com.limegroup.gnutella.tigertree; import com.limegroup.gnutella.DownloadManager; import com.limegroup.gnutella.URN; import com.limegroup.gnutella.library.FileDesc; import com.limegroup.gnutella.library.Library; /** * A cache of HashTrees that can be serialized between session. * <p> * Also maintains a mapping between SHA1 URNs and their associated tree. */ public interface HashTreeCache { /** Caches the root for the file desc, calculating it if necessary. */ public URN getOrScheduleHashTreeRoot(FileDesc fd); /** * If HashTree wasn't found, schedule file for hashing. * * @param fd * the <tt>FileDesc</tt> for which we want to obtain the * HashTree * @return HashTree for File */ public HashTree getHashTree(FileDesc fd); /** * Retrieves the cached HashTree for this URN. * * @param sha1 * the <tt>URN</tt> for which we want to obtain the HashTree * @return HashTree for URN */ public HashTree getHashTree(URN sha1); /** * @return a TTROOT urn matching the sha1 urn */ public URN getHashTreeRootForSha1(URN sha1); /** * Purges the HashTree for this URN. */ public void purgeTree(URN sha1); /** * Add a HashTree to the internal list if the tree depth is sufficient, null otherwise. * * @param sha1 * the SHA1- <tt>URN</tt> of a file * @param tree * the <tt>HashTree</tt> */ public HashTree addHashTree(URN sha1, HashTree tree); /** Marks the ttroot as the root for that sha1. */ public void addRoot(URN sha1, URN ttroot); /** * Write cache so that we only have to calculate them once. */ public void persistCache(Library library, DownloadManager downloadManager); }