FedP2P/multiless.go

48 lines
710 B
Go

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) {
if me.ok {
return
}
same, less := f()
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 })
}
func (me *multiLess) NextBool(l, r bool) {
me.StrictNext(l == r, l)
}