7 "github.com/edsrzf/mmap-go"
14 func (s segment) Size() int64 {
15 return int64(len(*s.MMap))
18 type MMapSpan struct {
22 func (ms *MMapSpan) Append(mmap mmap.MMap) {
23 ms.span = append(ms.span, segment{&mmap})
26 func (ms MMapSpan) Close() error {
27 for _, mMap := range ms.span {
28 err := mMap.(segment).Unmap()
36 func (ms MMapSpan) Size() (ret int64) {
37 for _, seg := range ms.span {
43 func (ms MMapSpan) ReadAt(p []byte, off int64) (n int, err error) {
44 ms.ApplyTo(off, func(intervalOffset int64, interval sizer) (stop bool) {
45 _n := copy(p, (*interval.(segment).MMap)[intervalOffset:])
56 func (ms MMapSpan) WriteAt(p []byte, off int64) (n int, err error) {
57 ms.ApplyTo(off, func(iOff int64, i sizer) (stop bool) {
59 _n := copy((*mMap.MMap)[iOff:], p)
60 // err = mMap.Sync(gommap.MS_ASYNC)
68 if err != nil && len(p) != 0 {
69 err = io.ErrShortWrite