code: func (r *Row) Shift(n int64) (*Row, error) {
  	if n < 0 {
  		return nil, errors.New("cannot shift by negative values")
  	} else if n == 0 {
  		return r, nil
  	}
  
  	work := r
  	var segments []rowSegment
  	for i := int64(0); i < n; i++ {
  		segments = segments[:0]
  		for _, segment := range work.segments {
  			shifted, err := segment.Shift()
  			if err != nil {
  				return nil, errors.Wrap(err, "shifting row segment")
  			}
  			segments = append(segments, *shifted)
  		}
  		work = &Row{segments: segments}
  	}
  
  	return work, nil
  }
docs: // Shift returns the bitwise shift of r by n bits.
  // Currently only positive shift values are supported.