Domain concepts =============== .. contents:: Table of Contents :local: .. _concept-Domain: Domain ------ Let `Dom` be a type that models :ref:`Domain (details) `. Then `Dom` also models :ref:`Regular (fundamentals) `. .. _concept-Domain-types: .. rubric:: Types Then we can define : +--------------------------+-------------------------------------------------+--------------------------------------------------+ | Definition | Description | Requirement | +==========================+=================================================+==================================================+ | `Dom::point_type` | type of a point | models :ref:`concept-Point` concept | +--------------------------+-------------------------------------------------+--------------------------------------------------+ | `Dom::const_point_range` | type of the range to iterate over all the point | models :ref:`concept-BidirectionalRange` concept | +--------------------------+-------------------------------------------------+--------------------------------------------------+ | `Dom::value_type` | type of a value | - models :ref:`concept-Value` concept | | | | - non-const | | | | - not a reference | +--------------------------+-------------------------------------------------+--------------------------------------------------+ .. _concept-Domain-expressions: .. rubric:: Expressions Let : - ``dom`` be an instance of `Dom`. - ``dom_cpy`` be an instance of `Dom`. - ``cdom`` be an instance of `const Dom`. - ``lhs`` be an instance of `const Dom`. - ``rhs`` be an instance of `const Dom`. - ``p`` be an instance of `Dom::point_type`. Then we have the following valid expressions : +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | Expression | Return type | Pre-condition | Post-condition | Description | +==========================+=====================+===============+================+====================================================+ | ``dom()`` | `Dom` | none | none | Constructs a domain ``dom`` of type `Dom` | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``cdom()`` | `const Dom` | none | none | Constructs a domain ``cdom`` of type `Dom` | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``dom_cpy(dom)`` | `Dom` | none | none | Copy-constructs a domain ``dom_cpy`` from ``dom`` | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``dom_cpy(cdom)`` | `Dom` | none | none | Copy-constructs a domain ``dom_cpy`` from ``cdom`` | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``dom_cpy(move(dom))`` | `Dom` | none | none | Move-constructs a domain ``dom_cpy`` from ``dom`` | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``dom_cpy = dom`` | `Dom&` | none | none | Assign ``dom`` to ``dom_cpy`` | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``dom_cpy = cdom`` | `Dom&` | none | none | Assign ``cdom`` to ``dom_cpy`` | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``dom_cpy = move(dom)`` | `Dom&` | none | none | Move-assign ``dom`` to ``dom_cpy`` | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``lhs == rhs`` | `bool` | none | none | Compare wether two domains are equal | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``lhs != rhs`` | `bool` | none | none | Compare wether two domains are different | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``rhs == lhs`` | `bool` | none | none | Compare wether two domains are equal | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``rhs != lhs`` | `bool` | none | none | Compare wether two domains are different | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``cdom.has(p)`` | `bool` | none | none | Check wether ``p`` belongs to the domain ``cdom`` | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``cdom.empty()`` | `bool` | none | none | Check wether ``cdom`` is an empty domain | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``cdom.is_continuous()`` | `bool` | none | none | Check wether ``cdom`` is a continuous domain | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``cdom.is_discrete()`` | `bool` | none | none | Check wether ``cdom`` is a discrete domain | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+ | ``cdom.points()`` | `const_point_range` | none | none | Return a range of points to iterate over it | +--------------------------+---------------------+---------------+----------------+----------------------------------------------------+