class TypedRange implements Comparable<TypedRange<T>> {

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + (int) (length ^ (length >>> 32));
    result = prime * result + ((metadata == null) ? 0 : metadata.hashCode());
    result = prime * result + (int) (offset ^ (offset >>> 32));
    return result;
  }

  public  TypedRange(long offset, long length, T metadata);

}