/** {@inheritDoc} */
  @Override
  protected void orderItems() {
    int idx = 0;

    for (StringIdItem s : strings.values()) {
      s.setIndex(idx);
      idx++;
    }
  }
  /**
   * Gets the index of the given string, which must have been added to this instance.
   *
   * @param string {@code non-null;} the string to look up
   * @return {@code >= 0;} the string's index
   */
  public int indexOf(CstUtf8 string) {
    if (string == null) {
      throw new NullPointerException("string == null");
    }

    throwIfNotPrepared();

    StringIdItem s = strings.get(string);

    if (s == null) {
      throw new IllegalArgumentException("not found");
    }

    return s.getIndex();
  }
  /**
   * Interns an element into this instance.
   *
   * @param string {@code non-null;} the string to intern
   * @return {@code non-null;} the interned string
   */
  public StringIdItem intern(StringIdItem string) {
    if (string == null) {
      throw new NullPointerException("string == null");
    }

    throwIfPrepared();

    CstUtf8 value = string.getValue();
    StringIdItem already = strings.get(value);

    if (already != null) {
      return already;
    }

    strings.put(value, string);
    return string;
  }