8 "github.com/edsrzf/mmap-go"
15 func (s segment) Size() int64 {
16 return int64(len(*s.MMap))
19 type MMapSpan struct {
24 func (ms *MMapSpan) Append(mmap mmap.MMap) {
25 ms.span = append(ms.span, segment{&mmap})
28 func (ms *MMapSpan) Close() error {
31 for _, mMap := range ms.span {
32 err := mMap.(segment).Unmap()
40 func (ms *MMapSpan) Size() (ret int64) {
43 for _, seg := range ms.span {
49 func (ms *MMapSpan) ReadAt(p []byte, off int64) (n int, err error) {
52 ms.ApplyTo(off, func(intervalOffset int64, interval sizer) (stop bool) {
53 _n := copy(p, (*interval.(segment).MMap)[intervalOffset:])
64 func (ms *MMapSpan) WriteAt(p []byte, off int64) (n int, err error) {
67 ms.ApplyTo(off, func(iOff int64, i sizer) (stop bool) {
69 _n := copy((*mMap.MMap)[iOff:], p)
70 // err = mMap.Sync(gommap.MS_ASYNC)
78 if err != nil && len(p) != 0 {
79 err = io.ErrShortWrite