package version

// List is a slice of versions that implements sort.Interface.
type List []*Version

// Match tests versions against a constraint and returns a new List of matching versions only.
func (list List) Match(c *Constraint) List {
	filtered := List{}

	for _, v := range list {
		if v.Match(c) {
			filtered = append(filtered, v)
		}
	}

	return filtered
}

func (list List) Len() int {
	return len(list)
}

func (list List) Less(i, j int) bool {
	return list[i].Less(list[j])
}

func (list List) Swap(i, j int) {
	a := list[i]
	b := list[j]
	list[i] = b
	list[j] = a
}