.. default-domain:: chpl .. _readme-sets: ========================== Associative Set Operations ========================== This README describes some initial support for set operations on associative domains. It is expected that the features described here will be included in a future version of the language specification. .. contents:: Associative Domain Set Operations ================================= The following set functions/operations are supported by associative domains. In the following code examples, ``A``, ``B``, and ``C`` are associative domains. For every operator, an op= variant exists. For these op= functions, LHS op= RHS, the LHS argument is modified in-place using the same rules as the normal operator function. isSubset -------- .. code-block:: chapel proc isSubset(super : domain) : bool; A.isSubset(B); This statement will return true if ``A`` is a subset of ``B``. ``A`` is a subset of ``B`` if every index in ``A`` is also present in ``B``. isSuper ------- .. code-block:: chapel proc isSuper(sub : domain) : bool; A.isSuper(B); This statement will return true if ``B`` is a subset of ``A``. Union ----- .. code-block:: chapel C = A + B; C = A | B; ``C`` will be a new associative domain which contains every index in ``A`` and every index in ``B``. The op= variants are:: A |= B; A += B; Difference ---------- .. code-block:: chapel C = A - B; ``C`` will contain the indices in ``A`` that are not also in ``B``. The op= variant is:: A -= B; Any indices in both ``A`` and ``B`` will be removed from ``A``. Intersection ------------ .. code-block:: chapel C = A & B; ``C`` will contain the indices in ``A`` that are also in ``B``. The op= variant is:: A &= B; Symmetric Difference -------------------- .. code-block:: chapel C = A ^ B; ``C`` will contain the indices that are unique to ``A`` and unique to ``B``. Another way of writing this statement is:: C = (A + B) - (A & B) The op= variant is:: A ^= B;