| package set |
| |
| // Rules represents the operations that define membership for a Set. |
| // |
| // Each Set has a Rules instance, whose methods must satisfy the interface |
| // contracts given below for any value that will be added to the set. |
| type Rules interface { |
| // Hash returns an int that somewhat-uniquely identifies the given value. |
| // |
| // A good hash function will minimize collisions for values that will be |
| // added to the set, though collisions *are* permitted. Collisions will |
| // simply reduce the efficiency of operations on the set. |
| Hash(interface{}) int |
| |
| // Equivalent returns true if and only if the two values are considered |
| // equivalent for the sake of set membership. Two values that are |
| // equivalent cannot exist in the set at the same time, and if two |
| // equivalent values are added it is undefined which one will be |
| // returned when enumerating all of the set members. |
| // |
| // Two values that are equivalent *must* result in the same hash value, |
| // though it is *not* required that two values with the same hash value |
| // be equivalent. |
| Equivalent(interface{}, interface{}) bool |
| } |
| |
| // OrderedRules is an extension of Rules that can apply a partial order to |
| // element values. When a set's Rules implements OrderedRules an iterator |
| // over the set will return items in the order described by the rules. |
| // |
| // If the given order is not a total order (that is, some pairs of non-equivalent |
| // elements do not have a defined order) then the resulting iteration order |
| // is undefined but consistent for a particular version of cty. The exact |
| // order in that case is not part of the contract and is subject to change |
| // between versions. |
| type OrderedRules interface { |
| Rules |
| |
| // Less returns true if and only if the first argument should sort before |
| // the second argument. If the second argument should sort before the first |
| // or if there is no defined order for the values, return false. |
| Less(interface{}, interface{}) bool |
| } |