FedP2P/multiless.go

48 lines
710 B
Go
Raw Normal View History

2018-06-16 15:04:12 +08:00
package torrent
func strictCmp(same, less bool) cmper {
return func() (bool, bool) { return same, less }
}
type (
cmper func() (same, less bool)
multiLess struct {
ok bool
less bool
}
)
func (me *multiLess) Final() bool {
if !me.ok {
panic("undetermined")
}
return me.less
}
func (me *multiLess) FinalOk() (left, ok bool) {
return me.less, me.ok
}
func (me *multiLess) Next(f cmper) {
2018-06-17 19:11:01 +08:00
if me.ok {
return
}
same, less := f()
2018-06-16 15:04:12 +08:00
if same {
return
}
me.ok = true
me.less = less
}
func (me *multiLess) StrictNext(same, less bool) {
if me.ok {
return
}
me.Next(func() (bool, bool) { return same, less })
2018-06-16 15:04:12 +08:00
}
func (me *multiLess) NextBool(l, r bool) {
me.StrictNext(l == r, l)
}