// WriteAt write a needle by specified offset; func (b *SuperBlock) WriteAt(offset uint32, n *needle.Needle) (err error) { if b.LastErr != nil { return b.LastErr } if _, err = b.w.WriteAt(n.Buffer(), needle.BlockOffset(offset)); err != nil { b.LastErr = err } return }
// ReadAt read a needle by specified offset, before call it, must set needle // TotalSize. func (b *SuperBlock) ReadAt(n *needle.Needle) (err error) { if b.LastErr != nil { return b.LastErr } if _, err = b.r.ReadAt(n.Buffer(), needle.BlockOffset(n.Offset)); err == nil { err = n.Parse() } else { b.LastErr = err } return }
// Write write needle to the block. func (b *SuperBlock) Write(n *needle.Needle) (err error) { if b.LastErr != nil { return b.LastErr } if _maxOffset-n.IncrOffset < b.Offset { err = errors.ErrSuperBlockNoSpace return } if _, err = b.w.Write(n.Buffer()); err == nil { err = b.flush(false) } else { b.LastErr = err return } b.Offset += n.IncrOffset b.Size += int64(n.TotalSize) return }