1 文本格式
using System;
using System.Collections;
using System.Collections.Generic;
namespace Legalsoft.Truffer
{
public abstract class Hashtable<K>
{
private int nhash { get; set; }
private int nmax { get; set; }
private int nn { get; set; }
private int ng { get; set; }
private int[] htable { get; set; }
private int[] next { get; set; }
private int[] garbg { get; set; }
private ulong[] thehash { get; set; }
public virtual ulong fn(K k) { return 0L; }
public Hashtable(int nh, int nm)
{
nhash = nh;
nmax = nm;
nn = 0;
ng = 0;
htable = new int[nh];
next = new int[nm];
garbg = new int[nm];
thehash = new ulong[nm];
for (int j = 0; j < nh; j++)
{
htable[j] = -1;
}
}
public int iget(K key)
{
//ulong pp = hash.fn(key);
//ulong pp = new Hashfn1(nhash).fn(key);
ulong pp = fn(key);
int j = (int)(pp % (ulong)nhash);
for (int k = htable[j]; k != -1; k = next[k])
{
if (thehash[k] == pp)
{
return k;
}
}
return -1;
}
public int iset(K key)
{
int kprev = 0;
//ulong pp = new Hashfn1(nhash).fn(key);
ulong pp = fn(key);
int j = (int)(pp % (ulong)nhash);
int k;
if (htable[j] == -1)
{
k = ng > 0 ? garbg[--ng] : nn++;
htable[j] = k;
}
else
{
k = htable[j];
for (; k != -1; k = next[k])
{
if (thehash[k] == pp)
{
return k;
}
kprev = k;
}
k = ng > 0 ? garbg[--ng] : nn++;
next[kprev] = k;
}
if (k >= nmax)
{
throw new Exception("storing too many values");
}
thehash[k] = pp;
next[k] = -1;
return k;
}
public int ierase(K key)
{
//ulong pp = new Hashfn1(nhash).fn(key);
ulong pp = fn(key);
int j = (int)(pp % (ulong)nhash);
if (htable[j] == -1)
{
return -1;
}
int kprev = -1;
for (int k = htable[j]; k != -1; k = next[k])
{
if (thehash[k] == pp)
{
if (kprev == -1)
{
htable[j] = next[k];
}
else
{
next[kprev] = next[k];
}
garbg[ng++] = k;
return k;
}
kprev = k;
}
return -1;
}
public int ireserve()
{
int k = ng > 0 ? garbg[--ng] : nn++;
if (k >= nmax)
{
throw new Exception("reserving too many values");
}
next[k] = -2;
return k;
}
public int irelinquish(int k)
{
if (next[k] != -2)
{
return -1;
}
garbg[ng++] = k;
return k;
}
}
}
2 代码格式
using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer
{public abstract class Hashtable<K>{private int nhash { get; set; }private int nmax { get; set; }private int nn { get; set; }private int ng { get; set; }private int[] htable { get; set; }private int[] next { get; set; }private int[] garbg { get; set; }private ulong[] thehash { get; set; }public virtual ulong fn(K k) { return 0L; }public Hashtable(int nh, int nm){nhash = nh;nmax = nm;nn = 0;ng = 0;htable = new int[nh];next = new int[nm];garbg = new int[nm];thehash = new ulong[nm];for (int j = 0; j < nh; j++){htable[j] = -1;}}public int iget(K key){//ulong pp = hash.fn(key);//ulong pp = new Hashfn1(nhash).fn(key);ulong pp = fn(key);int j = (int)(pp % (ulong)nhash);for (int k = htable[j]; k != -1; k = next[k]){if (thehash[k] == pp){return k;}}return -1;}public int iset(K key){int kprev = 0;//ulong pp = new Hashfn1(nhash).fn(key);ulong pp = fn(key);int j = (int)(pp % (ulong)nhash);int k;if (htable[j] == -1){k = ng > 0 ? garbg[--ng] : nn++;htable[j] = k;}else{k = htable[j];for (; k != -1; k = next[k]){if (thehash[k] == pp){return k;}kprev = k;}k = ng > 0 ? garbg[--ng] : nn++;next[kprev] = k;}if (k >= nmax){throw new Exception("storing too many values");}thehash[k] = pp;next[k] = -1;return k;}public int ierase(K key){//ulong pp = new Hashfn1(nhash).fn(key);ulong pp = fn(key);int j = (int)(pp % (ulong)nhash);if (htable[j] == -1){return -1;}int kprev = -1;for (int k = htable[j]; k != -1; k = next[k]){if (thehash[k] == pp){if (kprev == -1){htable[j] = next[k];}else{next[kprev] = next[k];}garbg[ng++] = k;return k;}kprev = k;}return -1;}public int ireserve(){int k = ng > 0 ? garbg[--ng] : nn++;if (k >= nmax){throw new Exception("reserving too many values");}next[k] = -2;return k;}public int irelinquish(int k){if (next[k] != -2){return -1;}garbg[ng++] = k;return k;}}
}