Files
spark/src/DataStreamSuite/DataStreamCore/BlueData/BlueIntHash.cs
T
2023-09-04 16:25:40 -04:00

71 lines
1.5 KiB
C#

using System;
using BCG;
//using BCG.Utilities;
namespace BCG
{
[Serializable]
public class BlueIntHash
{
[Serializable]
private struct Element
{
public int k;
public int v;
public int next;
}
public BlueIntHash(int capacity)
{
myElementPool = new Element[capacity + 1];
myNumberOfBuckets = capacity * 3 + 1;
myBuckets = new int[myNumberOfBuckets];
}
public void add(int k, int v)
{
int index = myGetHash(k);
myElementPool[myFirstFreeElement].k = k;
myElementPool[myFirstFreeElement].v = v;
myElementPool[myFirstFreeElement].next = myBuckets[index];
myBuckets[index] = myFirstFreeElement;
myFirstFreeElement++;
}
[Serializable]
public class ElementNotFound : Exception
{ }
public int find(int k)
{
int b = myFind(k);
if (b == 0)
throw new ElementNotFound();
else
return myElementPool[b].v;
}
public bool isPresent(int k)
{ return myFind(k) != 0; }
private int myFind(int k)
{
int b = myBuckets[myGetHash(k)];
while (b != 0 && myElementPool[b].k != k)
b = myElementPool[b].next;
return b;
}
private int myGetHash(int k)
{ return k % myNumberOfBuckets; }
private int myFirstFreeElement = 1;
private Element[] myElementPool;
private int[] myBuckets;
private int myNumberOfBuckets;
}
}