code: public Span getCurrentPosition(boolean beforeTid)
      {
          if (getType() == null)
          {
              throw new IllegalStateException("IonReader isn't positioned on a value");
          }
          // Only spans that include the TID octet are seekable.
          IonReaderBinarySpan pos = new IonReaderBinarySpan(beforeTid);
          long start = beforeTid ?  _position_start : _value_start;
          long len = beforeTid ? _position_len : _value_len;
          pos._offset = start - _physical_start_offset;
          pos._limit = pos._offset + len;
          pos._symbol_table = _symbols;
          pos._state = _state;
          return pos;
      }
docs: Determines the abstract position of the reader, such that one can
  later {@link #seek} back to it.
  <p>
  The current implementation only works when the reader is positioned on
  a value (not before, between, or after values). In other words, one
  should only call this method when {@link #getType()} is non-null.
  
  @param beforeTid -
  When true, the position returned starts before the
  type/length octet.
  When false, the position returned starts after the
  type/length octet and any optional length octets.
  
  @return the current position; not null.
  
  @throws IllegalStateException if the reader doesn't have a current
  value.