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) }