Domain concepts (details) ========================= .. contents:: Table of Contents :local: .. _concept-details-Domain: Domain ------ .. cpp:concept:: template Domain #. Refines the :cpp:concept:`template Regular` concept. #. ``Dom::point_type`` models :cpp:concept:`template Point` concept. #. ``Dom::const_point_range`` models the :cpp:concept:`template BidirectionalRange` concept #. ``Dom::codomain_type`` models :cpp:concept:`template Value` concept, is non-const and is not a reference. #. ``Dom`` provides methods `has`, `shape`, `empty`, `is_continuous`, `is_discrete` and `points`. **Notation** .. cpp:type:: Dom .. cpp:type:: point_type = Dom::point_type .. cpp:type:: const_point_range = Dom::const_point_range .. cpp:var:: Dom dom .. cpp:var:: Dom dom_cpy .. cpp:var:: const Dom cdom .. cpp:var:: const Dom lhs .. cpp:var:: const Dom rhs .. cpp:var:: point_type p **Valid Expressions** - :cpp:expr:`dom()` returns an instance of :cpp:expr:`Dom`. - :cpp:expr:`cdom()` returns an instance of :cpp:expr:`const Dom`. - :cpp:expr:`dom_cpy(dom)` returns an instance of :cpp:expr:`Dom`. - :cpp:expr:`dom_cpy(cdom)` returns an instance of :cpp:expr:`Dom`. - :cpp:expr:`dom_cpy(move(dom))` returns an instance of :cpp:expr:`Dom`. - :cpp:expr:`dom_cpy = dom` returns an instance of :cpp:expr:`Dom&`. - :cpp:expr:`dom_cpy = cdom` returns an instance of :cpp:expr:`Dom&`. - :cpp:expr:`dom_cpy = move(dom)` returns an instance of :cpp:expr:`Dom&`. - :cpp:expr:`lhs == rhs` return-type models :cpp:concept:`template Boolean`. - :cpp:expr:`lhs != rhs` return-type models :cpp:concept:`template Boolean`. - :cpp:expr:`rhs == lhs` return-type models :cpp:concept:`template Boolean`. - :cpp:expr:`rhs != lhs` return-type models :cpp:concept:`template Boolean`. - :cpp:expr:`cdom.has(p)` return-type models :cpp:concept:`template Boolean`. - :cpp:expr:`cdom.empty()` return-type models :cpp:concept:`template Boolean`. - :cpp:expr:`cdom.is_continuous()` return-type models :cpp:concept:`template Boolean`. - :cpp:expr:`cdom.is_discrete()` return-type models :cpp:concept:`template Boolean`. - :cpp:expr:`cdom.points()` returns :cpp:expr:`const_point_range`. **Possible implementation** .. code:: cpp template> concept Domain = Regular && requires { typename Dom::point_type; typename Dom::const_point_range; typename Dom::codomain_type; } && Point && BidirectionalRange && Value && Same && !is_const_v && !is_reference_v && requires(const Dom cdom, Dom::point_type p) { { cdom.has(p) } -> bool; { cdom.empty() } -> bool; { cdom.is_continuous() } -> bool; { cdom.is_discrete() } -> bool; { cdom.points() } -> Dom::const_point_range; };