]> git.immae.eu Git - github/fretlink/terraform-provider-statuscake.git/blame - vendor/github.com/zclconf/go-cty/cty/set/rules.go
Upgrade to 0.12
[github/fretlink/terraform-provider-statuscake.git] / vendor / github.com / zclconf / go-cty / cty / set / rules.go
CommitLineData
15c0b25d
AP
1package set
2
3// Rules represents the operations that define membership for a Set.
4//
5// Each Set has a Rules instance, whose methods must satisfy the interface
6// contracts given below for any value that will be added to the set.
7type Rules interface {
8 // Hash returns an int that somewhat-uniquely identifies the given value.
9 //
10 // A good hash function will minimize collisions for values that will be
11 // added to the set, though collisions *are* permitted. Collisions will
12 // simply reduce the efficiency of operations on the set.
13 Hash(interface{}) int
14
15 // Equivalent returns true if and only if the two values are considered
16 // equivalent for the sake of set membership. Two values that are
17 // equivalent cannot exist in the set at the same time, and if two
18 // equivalent values are added it is undefined which one will be
19 // returned when enumerating all of the set members.
20 //
21 // Two values that are equivalent *must* result in the same hash value,
22 // though it is *not* required that two values with the same hash value
23 // be equivalent.
24 Equivalent(interface{}, interface{}) bool
25}
107c1cdb
ND
26
27// OrderedRules is an extension of Rules that can apply a partial order to
28// element values. When a set's Rules implements OrderedRules an iterator
29// over the set will return items in the order described by the rules.
30//
31// If the given order is not a total order (that is, some pairs of non-equivalent
32// elements do not have a defined order) then the resulting iteration order
33// is undefined but consistent for a particular version of cty. The exact
34// order in that case is not part of the contract and is subject to change
35// between versions.
36type OrderedRules interface {
37 Rules
38
39 // Less returns true if and only if the first argument should sort before
40 // the second argument. If the second argument should sort before the first
41 // or if there is no defined order for the values, return false.
42 Less(interface{}, interface{}) bool
43}