////////////////// class KvadratiskHashTabell //////////////////////////////

package hjelpeklasser;

import java.util.*;

public class KvadratiskHashTabell<T> implements Beholder<T>
{
  private static final int[] PRIM = {1,3,7,11,19,31,59,107,211,419,827,1627,3251,
  6491,12979,25951,51899,103787,207563,415111,830191,1660367,3320699,6641387,6641387,
  13282747,26565491,53130971,106261931,212523859,425047703,850095391,1700190707};

  private static final class HashObjekt<T>       // en indre klasse
  {
    private final T verdi;                       // verdi av typen T
    private final int hashverdi;                 // hashverdien

    private HashObjekt(T verdi, int hashverdi)   // konstruktør
    {
      this.verdi = verdi;
      this.hashverdi = hashverdi;
    }
  }

  private final HashObjekt<T> x                  // et fast objekt
    = new HashObjekt<>(null, 0);                 // kun null-verdier

  private boolean ledig(int indeks)              // ledig for innlegging
  {
    HashObjekt<T> o = hash[indeks];              // objektet på indeks 
    return o == null || o == x;
  }

  private HashObjekt<T>[] hash;       // en tabell med hashobjekter
  private final float tetthet;        // eng: loadfactor
  private int grense;                 // eng: threshold, norsk: terskel
  private int antall;                 // antall verdier
  private int iprim;                  // indeks i primtallstabellen

  private void utvid()                // utvider tabellen
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  public KvadratiskHashTabell(int dim)         // konstruktør 
  {
    // kode mangler
  }

  public KvadratiskHashTabell()                // standardkonstruktør
  {
    this(11);
  }

  @Override
  public int antall()
  {
    return antall;
  }

  @Override
  public boolean tom()
  {
    return antall == 0;
  }

  @Override
  public boolean leggInn(T verdi)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public String toString()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public boolean inneholder(T verdi)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public boolean fjern(T verdi)
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public void nullstill()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

  @Override
  public Iterator<T> iterator()
  {
    throw new UnsupportedOperationException("Ikke laget ennå!");
  }

} // KvadratiskHashTabell