2014-04-09 00:36:05 +08:00
|
|
|
package mmap_span
|
2013-09-26 11:42:24 +08:00
|
|
|
|
|
|
|
type sizer interface {
|
|
|
|
Size() int64
|
|
|
|
}
|
|
|
|
|
2015-05-16 20:23:33 +08:00
|
|
|
type span []sizer
|
2013-09-26 11:42:24 +08:00
|
|
|
|
2016-04-19 12:11:11 +08:00
|
|
|
func (s span) ApplyTo(off int64, f func(int64, sizer) (stop bool)) {
|
|
|
|
for _, interval := range s {
|
2013-09-26 11:42:24 +08:00
|
|
|
iSize := interval.Size()
|
|
|
|
if off >= iSize {
|
|
|
|
off -= iSize
|
|
|
|
} else {
|
|
|
|
if f(off, interval) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
off = 0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|