110 lines
3.9 KiB
Java
110 lines
3.9 KiB
Java
|
|
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
|
|
// \\
|
|
// Centre for Speech Technology Research \\
|
|
// University of Edinburgh, UK \\
|
|
// Copyright (c) 1996,1997 \\
|
|
// All Rights Reserved. \\
|
|
// Permission is hereby granted, free of charge, to use and distribute \\
|
|
// this software and its documentation without restriction, including \\
|
|
// without limitation the rights to use, copy, modify, merge, publish, \\
|
|
// distribute, sublicense, and/or sell copies of this work, and to \\
|
|
// permit persons to whom this work is furnished to do so, subject to \\
|
|
// the following conditions: \\
|
|
// 1. The code must retain the above copyright notice, this list of \\
|
|
// conditions and the following disclaimer. \\
|
|
// 2. Any modifications must be clearly marked as such. \\
|
|
// 3. Original authors' names are not deleted. \\
|
|
// 4. The authors' names are not used to endorse or promote products \\
|
|
// derived from this software without specific prior written \\
|
|
// permission. \\
|
|
// THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK \\
|
|
// DISCLAIM ALL WARRANTIES With REGARD TO THIS SOFTWARE, INCLUDING \\
|
|
// ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT \\
|
|
// SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE \\
|
|
// FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES \\
|
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN \\
|
|
// AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, \\
|
|
// ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF \\
|
|
// THIS SOFTWARE. \\
|
|
// \\
|
|
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
|
|
// \\
|
|
// Author: Richard Caley (rjc@cstr.ed.ac.uk) \\
|
|
// -------------------------------------------------------------------- \\
|
|
// Like a Hashtable but for keys of type long. \\
|
|
// \\
|
|
//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\
|
|
|
|
|
|
package cstr.util ;
|
|
|
|
import java.lang.*;
|
|
import java.util.*;
|
|
|
|
public final class LongHash
|
|
{
|
|
LongBucket [] buckets;
|
|
|
|
public LongHash()
|
|
{
|
|
this(20);
|
|
}
|
|
|
|
public LongHash(int n)
|
|
{
|
|
buckets = new LongBucket[n];
|
|
}
|
|
|
|
private void debugDump()
|
|
{
|
|
System.out.println("");
|
|
for(int i=0; i<buckets.length; i++)
|
|
{
|
|
int n=0;
|
|
for(LongBucket bk=buckets[i]; bk!=null; bk=bk.next)
|
|
n++;
|
|
System.out.print("["+n+"]");
|
|
}
|
|
System.out.println("");
|
|
}
|
|
|
|
public void put(long k, Object v)
|
|
{
|
|
int b = doHash(k, buckets.length);
|
|
buckets[b] = new LongBucket(k, v, buckets[b]);
|
|
// debugDump();
|
|
}
|
|
|
|
public Object get(long k)
|
|
{
|
|
int b = doHash(k, buckets.length);
|
|
|
|
for(LongBucket bk=buckets[b]; bk!=null; bk=bk.next)
|
|
if (bk.key==k)
|
|
return bk.value;
|
|
|
|
return null;
|
|
}
|
|
|
|
private int doHash(long k, int l)
|
|
{
|
|
return (int)((k>>4)%l);
|
|
}
|
|
|
|
private final class LongBucket
|
|
{
|
|
long key;
|
|
Object value;
|
|
LongBucket next;
|
|
|
|
public LongBucket(long k, Object v, LongBucket n)
|
|
{
|
|
key=k;
|
|
value=v;
|
|
next=n;
|
|
}
|
|
}
|
|
|
|
}
|