public String intern(CharSequence cs) {
   int h = Maths.hash(cs) & mask;
   String s = interner[h];
   if (StringUtils.isEqual(s, cs)) return s;
   String s2 = cs.toString();
   return interner[h] = s2;
 }
  @NotNull
  @Override
  public BytesStore<Bytes<Underlying>, Underlying> copy() {
    if (bytesStore.underlyingObject() instanceof ByteBuffer) {
      ByteBuffer bb = ByteBuffer.allocateDirect(Maths.toInt32(readRemaining()));
      ByteBuffer bbu = (ByteBuffer) bytesStore.underlyingObject();
      ByteBuffer slice = bbu.slice();
      slice.position((int) readPosition());
      slice.limit((int) readLimit());
      bb.put(slice);
      bb.clear();
      return (BytesStore) BytesStore.wrap(bb);

    } else {
      return (BytesStore) NativeBytes.copyOf(this);
    }
  }
  @NotNull
  @Override
  public BytesStore<NativeBytesStore<Underlying>, Underlying> copy() throws IllegalStateException {
    if (underlyingObject == null) {
      NativeBytesStore<Void> copy = of(realCapacity(), false, true);
      OS.memory().copyMemory(address, copy.address, capacity());
      return (BytesStore) copy;

    } else if (underlyingObject instanceof ByteBuffer) {
      ByteBuffer bb = ByteBuffer.allocateDirect(Maths.toInt32(capacity()));
      bb.put((ByteBuffer) underlyingObject);
      bb.clear();
      return (BytesStore) wrap(bb);

    } else {
      throw new UnsupportedOperationException();
    }
  }
 public StringInterner(int capacity) {
   int n = Maths.nextPower2(capacity, 128);
   interner = new String[n];
   mask = n - 1;
 }