terraform/vendor/github.com/apparentlymart/go-versions/versions/set_subtract.go

57 lines
1.3 KiB
Go

package versions
import "fmt"
type setSubtract struct {
from setI
sub setI
}
func (s setSubtract) Has(v Version) bool {
return s.from.Has(v) && !s.sub.Has(v)
}
func (s setSubtract) AllRequested() Set {
// Our set requests anything that is requested by "from", unless it'd
// be excluded by "sub". Notice that the whole of "sub" is used, rather
// than just the requested parts, because requesting is a positive
// action only.
return Set{setI: s.from}.AllRequested().Subtract(Set{setI: s.sub})
}
func (s setSubtract) GoString() string {
return fmt.Sprintf("(%#v).Subtract(%#v)", s.from, s.sub)
}
// Subtract returns a new set that has all of the versions from the receiver
// except for any versions in the other given set.
//
// If the receiver is finite then the returned set is also finite.
func (s Set) Subtract(other Set) Set {
if other == None || s == None {
return s
}
if other == All {
return None
}
return Set{
setI: setSubtract{
from: s.setI,
sub: other.setI,
},
}
}
var _ setFinite = setSubtract{}
func (s setSubtract) isFinite() bool {
// subtract is finite if its "from" is finite
return isFinite(s.from)
}
func (s setSubtract) listVersions() List {
ret := s.from.(setFinite).listVersions()
ret = ret.Filter(Set{setI: s.sub})
return ret
}