code: func (r *Rollsum32) Write(p []byte) (n int, err error) {
  	ulen_p := uint(len(p))
  
  	if ulen_p >= r.blockSize {
  		// if it's really long, we can just ignore a load of it
  		remaining := p[ulen_p-r.blockSize:]
  		r.buffer.Write(remaining)
  		r.Rollsum32Base.SetBlock(remaining)
  	} else {
  		b_len := r.buffer.Len()
  		r.buffer.Write(p)
  		evicted := r.buffer.Evicted()
  		r.Rollsum32Base.AddAndRemoveBytes(p, evicted, b_len)
  	}
  
  	return len(p), nil
  }
docs: // cannot be called concurrently