# Set Enumeration Operands

An set enumeration operand is an enumeration of set
operands.

#### Examples of Set Enumeration Operands

Enumerations of set operands are commonly created using `Gecode::Mixin#set_var_array`

and `Gecode::Mixin#set_var_matrix`

.

# Creates an array of five set operands, with greatest lower bound
# {0} and least upper bound {0, 1, 2}.
set_enum = set_var_array(5, 0, 1..2)

A less common way to create the operands is by using `Gecode::Mixin#wrap_enum`

to wrap an existing enumeration that contains
set operands.

set_enum = wrap_enum([set_operand1, set_operand2])

## Constraints

Generated from `SetEnumConstraintReceiver`

.

`channel`

`channel(enum, options = {})`

Constrains this set enum to channel `int_enum_operand`

. The i:th set in the
enumeration of set operands is constrained to include the value of the j:th
integer operand.

Neither reification nor negation is supported.

##### Examples

# +set_enum+ is constrained to channel +int_enum+.
int_enum.must.channel set_enum
# This is another way of writing the above.
set_enum.must.channel int_enum

`at_most_share_one_element`

`at_most_share_one_element(options = {})`

Constrains all pairs of set operands in the enumeration to at most have one
element in common and be of a specified size. Providing a size is not
optional.

Neither negation nor reification is supported.

##### Examples

# All set operands in +sets+ must have cardinality 17 and no pair may
# have more than one element in common.
sets.must.at_most_share_one_element(:size => 17)

## Properties

Generated from `SetEnumOperand`

.

`[]`

`[](*vars)`

Produces a SetOperand representing the i:th set operand in the enumeration,
where i is the value of the int operand used as index.

A set can also be used as index, in which case a SelectedSetOperand is
produced.

##### Examples

# The set operand at the +x+:th position in +set_enum+,
# where +x+ is a int operand.
set_enum[x]
# The SelectedSetOperand representing sets at positions
# included in the value of +set+ in +set_enum+,
set_enum[set]

`union`

`union()`

Produces a SetOperand representing the union of all sets in this
enumeration.

##### Examples

# The union of all sets in +set_enum+.
set_enum.union

`intersection`

`intersection()`

Produces a SetOperand representing the intersection of all sets in this
enumeration.

##### Examples

# The intersection of all sets in +set_enum+.
set_enum.intersection

`disjoint_union`

`disjoint_union()`

Produces a SetOperand representing the disjoint union of all sets in this
enumeration.

##### Examples

# The disjoint union of all sets in +set_enum+.
set_enum.disjoint_union