## net.i2p.router.networkdb.kademlia
Class LocalHash

    java.lang.Object
      net.i2p.data.DataStructureImpl
          net.i2p.data.SimpleDataStructure
              net.i2p.data.Hash
                  net.i2p.router.networkdb.kademlia.LocalHash

All Implemented Interfaces:
  DataStructure

     class LocalHash

extends Hash

Pull the caching used only by KBucketImpl out of Hash and put it here.

Since:
  0.7.14
Author:
  jrandom, moved from Hash.java by zzz

Field Summary

Fields inherited from class net.i2p.data.Hash
`FAKE_HASH, HASH_LENGTH`

Fields inherited from class net.i2p.data.SimpleDataStructure
`_data, _length`

Constructor Summary
`LocalHash(byte[] b)`
`LocalHash(Hash h)`

Method Summary
`byte[]` `cachedXor(Hash key)` Calculate the xor with the current object and the specified hash, caching values where possible.
`void` `clearXorCache()` Deprecated. unused
`void` `prepareCache()` Prepare this hash's cache for xor values - very few hashes will need it, so we don't want to waste the memory, and lazy initialization would incur online overhead to verify the initialization.

Methods inherited from class net.i2p.data.Hash
`create, create, create, hashCode, length, readBytes, setData, toBase64`

Methods inherited from class net.i2p.data.SimpleDataStructure
`calculateHash, equals, fromBase64, fromByteArray, getData, toByteArray, toString, writeBytes`

Methods inherited from class net.i2p.data.DataStructureImpl
`read`

Methods inherited from class java.lang.Object
`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

Constructor Detail

### LocalHash

    public LocalHash(Hash h)

### LocalHash

    public LocalHash(byte[] b)

Method Detail

### prepareCache

    public void prepareCache()

  Prepare this hash's cache for xor values - very few hashes will need it, so we don't want to waste the memory, and lazy initialization would incur online overhead to verify the initialization.

### cachedXor

    public byte[] cachedXor(Hash key)
                     throws IllegalStateException

  Calculate the xor with the current object and the specified hash, caching values where possible. Currently this keeps up to MAX_CACHED_XOR (1024) entries, and uses an essentially random ejection policy. Later perhaps go for an LRU or FIFO?

  Throws:
    `IllegalStateException` - if you try to use the cache without first preparing this object's cache via .prepareCache()

### clearXorCache

    public void clearXorCache()

  Deprecated. unused