]>
Commit | Line | Data |
---|---|---|
15c0b25d AP |
1 | package 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. | |
7 | type 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. | |
36 | type 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 | } |