/** Replaces the value of the given entry. */
  public Object replaceValue(Entry e, Object value) {
    checkEntry(e);
    Object oldValue = ((LocationAwareEntry) e).setValue(value);
    return oldValue;
  }
  /** Determines whether a given entry is valid. */
  protected void checkEntry(Entry ent) throws InvalidEntryException {
    if(ent == null || !(ent instanceof LocationAwareEntry))
      throw new InvalidEntryException("invalid entry");
  }
  /** Inner class for a location-aware entry. */
  protected static class LocationAwareEntry 
    extends MyEntry implements Entry {
    /** Position where the entry is stored. */
    private Position loc;
    public LocationAwareEntry(Object key, Object value) {
      super(key, value);
    }
    public LocationAwareEntry(Object key, Object value, Position pos) {
      super(key, value);
      loc = pos;
    }
    protected Position location() {
      return loc;
    }
    protected Position setLocation(Position pos) {
      Position oldPosition = location();
      loc = pos;
      return oldPosition;
    }
    protected Object setKey(Object key) {
      Object oldKey = key();
      k = key;
      return oldKey;
    }
    protected Object setValue(Object value) {
      Object oldValue = value();
      v = value;
      return oldValue;
    }
  }