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