// Note: hashsize should be prime near (maxentries*10)
 public DHT(int maxentries, int hashsize, int maxvalues)
 {
     this.maxvalues = maxvalues;
     dirtyslots     = new List <int>(maxentries);
     slots          = new DHTSlot[hashsize];
     for (int hi = 0; hi != slots.Length; hi++)
     {
         slots[hi] = new DHTSlot();
         if (maxvalues > 0)
         {
             slots[hi].values = new Int32[maxvalues];
         }
     }
 }
 // Note: hashsize should be prime near (maxentries*10)
 public DHT(int maxentries, int hashsize, int maxvalues)
 {
     this.maxvalues = maxvalues;
     dirtyslots = new List<int>(maxentries);
     slots = new DHTSlot[hashsize];
     for (int hi = 0; hi != slots.Length; hi++)
     {
         slots[hi] = new DHTSlot();
         if (maxvalues > 0)
         {
             slots[hi].values = new Int32[maxvalues];
         }
     }
 }