docs: public <T extends AbstractXTree<N>> void readSuperNode(ObjectInput in, T tree) throws IOException, ClassNotFoundException {
      readExternal(in);
      if(capacity_to_be_filled <= 0 || !isSuperNode()) {
        throw new IllegalStateException("This node does not appear to be a supernode");
      }
      if(isLeaf) {
        throw new IllegalStateException("A supernode is cannot be a leaf");
      }
      // TODO: verify
      entries = new Entry[capacity_to_be_filled];
      // old way:
      // entries = (E[]) new XDirectoryEntry[capacity_to_be_filled];
      capacity_to_be_filled = 0;
      for(int i = 0; i < numEntries; i++) {
        SpatialEntry s = new SpatialDirectoryEntry();
        s.readExternal(in);
        entries[i] = s;
      }
      N n = tree.getSupernodes().put((long) getPageID(), (N) this);
      if(n != null) {
        Logging.getLogger(this.getClass()).fine("Warning: this supernode should only be read once. Now a node of size " + entries.length + " has replaced a node of size " + n.entries.length + " for id " + getPageID());
      }
    }