Image concepts (details)¶
Table of Contents
Image¶
-
template<typename
Ima>
conceptImage¶ Ima::pixel_typemodels thetemplate <typename Pix> Pixelconcept.Ima::domain_typemodels thetemplate <typename Dom> Domainconcept.Ima::index_typemodels thetemplate <typename Idx> Indexconcept.Ima::const_pixel_rangemodels thetemplate <typename FwdRng> ForwardRangeconcept.Ima::const_value_rangemodels thetemplate <typename FwdRng> ForwardRangeconcept.Ima::value_typemodels thetemplate <typename Val> Valueconcept, is non-const and is not a reference.Ima::difference_typemodels thetemplate <typename T> SignedIntegralconcept.Imais consistant withpoint_type,value_typeandreferencefrompixel_type.Imaprovide methodsis_concrete,to_concrete,values,pixels,domainoperator[],index_of_point,point_at_indexanddelta_index.
Notation
-
using
difference_type= decltype(index_type() - index_type())¶
-
using
point_type= pixel_type::point_type¶
-
using
value_type= pixel_type::value_type¶
-
using
const_reference= const_pixel_type::reference¶
Valid Expressions
is_const_v<value_type>returnsfalseis_reference<value_type>returnsfalsecima.is_concrete(p)returns-type modelstemplate <typename B> Booleancima.to_concrete(p)returns-type modelstemplate <typename ConcIma> ConcreteImagecima.pixels()returnsconst_pixel_rangecima.values()returnsconst_value_rangecima.domain()returnsdomain_typecima[k]returnsconst_referencecima.index_of_point(p)returnsindex_typecima.point_of_index(k)returnspoint_typecima.delta_index(p)returnsdifference_type
Possible implementation
template <typename Im, Ima = remove_cvref<Im>> concept Image = requires { typename Ima::pixel_type; typename Ima::const_pixel_type typename Ima::point_type; typename Ima::value_type; typename Ima::domain_type; typename Ima::difference_type; typename Ima::index_type; typename Ima::const_reference; typename Ima::const_pixel_range; typename Ima::const_value_range; } && Pixel<Ima::pixel_type> && Point<Ima::point_type> && Value<Ima::value_type> && Domain<Ima::domain_type> && Index<Ima::index_type> && SignedIntegral<Ima::difference_type> && ForwardRange<Ima::const_pixel_range> && ForwardRange<Ima::const_value_range> && Same<Ima::difference_type, decltype(Ima::index_type() - Ima::index_type())> && Same<Ima::point_type, Ima::pixel_type::point_type> && Same<Ima::value_type, Ima::pixel_type::value_type> && Same<Ima::const_reference, const Ima::pixel_type::reference> && Same<Ima::const_pixel_type, const Ima::pixel_type> && Same<Ima::const_pixel_type, Ima::const_pixel_range::value_type> && Same<Ima::const_reference, Ima::const_value_range::value_type> && !is_const_v<Ima::value_type> && !is_reference_v<Ima::value_type> && requires( Ima ima, const Ima cima, Ima::domain_type d, Ima::index_type k, Ima::point_type p) { { cima[k] } -> Ima::const_reference, { cima.pixels() } -> Ima::const_pixel_range; { cima.values() } -> Ima::const_value_range; { cima.domain() } -> Ima::domain_type; { cima.point_of_index(k) } -> Ima::point_type { cima.index_at_point(p) } -> Ima::index_type; { cima.delta_index(p) } -> Ima::difference_Type; { cima.is_concrete() } -> Boolean; { cima.to_toncrete() } -> ConcreteImage; };
ConcreteImage¶
-
template<typename
ConcIma>
conceptConcreteImage¶ - Refines the
template <typename T> Semiregularconcept. - Refines the
template <typename Ima> Imageconcept. ConcImaprovide methodsresizeandreindex.
Notation
-
using
value_type= pixel_type::value_type¶
Valid Expressions
concima()returns an instance ofConcIma.cconcima()returns an instance ofconst ConcIma.concima_cpy(concima)returns an instance ofConcIma.concima_cpy(cconcima)returns an instance ofConcIma.concima_cpy(move(concima))returns an instance ofConcIma.concima_cpy = concimareturns an instance ofConcIma&.concima_cpy = cconcimareturns an instance ofConcIma&.concima_cpy = move(concima)returns an instance ofConcIma&.concima.resize(d)is valid.concima.resize(d, v)is valid.concima.reindex(k)is valid.
Possible implementation
template <typename ConcIm, ConcIma = remove_cvref<ConcIm>> concept ConcreteImage = Semiregular<ConcIma> && Image<ConcIma> && requires( ConcIma ima, ConcIma::domain_type d, ConcIma::index_type k, ConcIma::value_type v) { { ima.resize(d) }; { ima.resize(d, v) }; { ima.reindex(k) }; };
- Refines the
WritableImage¶
-
template<typename
WIma>
conceptWritableImage¶ - Refines the concept
template <typename Ima> Image. - Defines the non-const version of
reference,value_rangeandpixel_range. - Access methods now return mutable references.
Notation
-
using
reference= pixel_type::reference¶
-
domain_type
d¶
Valid Expressions
wima.pixels()returnspixel_rangewima.values()returnsvalue_rangewima[k]returnsreference
Possible implementation
template <typename WIm, WIma = remove_cvref<WIm>> concept WritableImage = Image<WIma> && requires { typename WIma::pixel_range; typename WIma::value_range; } && ForwardRange<WIma::pixel_range> && ForwardRange<WIma::value_range> && OutputRange<WIma::pixel_range, WIma::pixel_type> && OutputRange<WIma::value_range, WIma::value_type> && Same<WIma::reference, WIma::pixel_type::reference> && Same<WIma::pixel_type, WIma::pixel_range::value_type> && Same<WIma::reference, WIma::value_range::value_type> && requires(WIma wima, WIma::index_type k, WIma::domain_type d, WIma::value_type v) { { wima[k] } -> WIma::reference; { wima.pixels() } -> WIma::pixel_range; { wima.values() } -> WIma::value_range; };
- Refines the concept
BidirectionalImage¶
-
template<typename
BidirIma>
conceptBidirectionalImage¶ - Refines the concept
template <typename Ima> Image BidirIma::const_pixel_rangemodels thetemplate <typename BidirRng> BidirectionalRangeconcept.BidirIma::const_value_rangemodels thetemplate <typename BidirRng> BidirectionalRangeconcept.
Notation
Possible implementation
template <typename BidirIm, BidirIma = remove_cvref<BidirIm>> concept BidirectionalImage = Image<BidirIma> && BidirectionalRange<BidirIma::const_pixel_range> && BidirectionalRange<BidirIma::const_value_range> && Same<BidirIma::const_pixel_type, BidirIma::const_pixel_range::value_type> && Same<BidirIma::const_reference, BidirIma::const_value_range::value_type>;
- Refines the concept
WritableBidirectionalImage¶
-
template<typename
WBidirIma>
conceptWritableBidirectionalImage¶ - Refines the concept
template <typename WIma> WritableImage. - Refines the concept
template <typename BidirIma> BidirectionnalImage. WBidirIma::pixel_rangemodels thetemplate <typename BidirRng> BidirectionalRangeconcept.WBidirIma::value_rangemodels thetemplate <typename BidirRng> BidirectionalRangeconcept.
Notation
Possible implementation
template <typename WBidirIm, WBidirIma = remove_cvref<WBidirIm>> concept WritableBidirectionalImage = WritableImage<WBidirIma> && BidirectionnalImage<WBidirIma> && BidirectionalRange<WBidirIma::pixel_range> && BidirectionalRange<WBidirIma::value_range> && Same<WBidirIma::pixel_type, WBidirIma::pixel_range::value_type> && Same<WBidirIma::reference, WBidirIma::value_range::value_type>;
- Refines the concept
AccessibleImage¶
-
template<typename
AccIma>
conceptAccessibleImage¶ - Refines the concept
template <typename Ima> Image. - Add new access methods based on
point_type:operator(),pixel,atandpixel_at
Notation
-
using
point_type= pixel_type::point_type¶
-
using
value_type= pixel_type::value_type¶
-
using
const_reference= const pixel_type::reference¶
Valid Expressions
caccima(p)returnsconst_referencewith bound checking.caccima.pixel(p)returnsconst_pixel_typewith bound checking.caccima.at(p)returnsconst_referencewithout bound checking.caccima.pixel_at(p)returnsconst_pixel_typewithout bound checking.
Possible implementation
template <typename AccIm, AccIma = remove_cvref<AccIm>> concept AccessibleImage = Image<AccIma> && requires(const AccIma caccima, AccIma::point_type p) { accima(p) } -> AccIma::const_reference; { accima.pixel(p) } -> AccIma::const_pixel_type; { accima.at(p) } -> AccIma::const_reference; { accima.pixel_at(p) } -> AccIma::const_pixel_type; };
- Refines the concept
WritableAccessibleImage¶
-
template<typename
WAccIma>
conceptWritableAccessibleImage¶ - Refines the concept
template <typename WIma> WritableImage. - Refines the concept
template <typename AccIma> AccessibleImage. - Add new access methods based on
point_type:operator(),pixel,atandpixel_at
Notation
-
using
point_type= pixel_type::point_type¶
-
using
value_type= pixel_type::value_type¶
-
using
reference= pixel_type::reference¶
Valid Expressions
waccima(p)returnsreferencewith bound checking.waccima.pixel(p)returnspixel_typewith bound checking.waccima.at(p)returnsreferencewithout bound checking.waccima.pixel_at(p)returnspixel_typewithout bound checking.
Possible implementation
template <typename WAccIm, WAccIma = remove_cvref<WAccIm>> concept WritableAccessibleImage = WritableImage<WAccIma> && AccessibleImage<WAccIma> && requires(WAccIma waccima, WAccIma::point_type p) { waccima(p) } -> WAccIma::reference; { waccima.pixel(p) } -> WAccIma::pixel_type; { waccima.at(p) } -> WAccIma::reference; { waccima.pixel_at(p) } -> WAccIma::pixel_type; };
- Refines the concept
RandomAccessImage¶
-
template<typename
RndAccIma>
conceptRandomAccessImage¶ - Refines the concept
template <typename BidirIma> BidirectionalImage. - Refines the concept
template <typename AccIma> AccessibleImage. RndAccIm::const_pixel_rangemodels both thetemplate <typename RndAccRng> RandomAccessRangeand thetemplate <typename SRng> SizedRangeconcept.RndAccIm::const_value_rangemodels both thetemplate <typename RndAccRng> RandomAccessRangeand thetemplate <typename SRng> SizedRangeconcept.
Notation
-
type
RndAccIm¶
Possible implementation
template <typename RndAccIm, RndAccIma = remove_cvref<RndAccIm>> concept RandomAccessImage = BidirectionalImage<RndAccIma> && AccessibleImage<RndAccIma> && RandomAccessRange<RndAccIma::const_pixel_range> && RandomAccessRange<RndAccIma::const_value_range> && SizedRange<WRndAccIma::const_pixel_range> && SizedRange<WRndAccIma::const_value_range> && Same<RndAccIma::const_pixel_type, RndAccIma::const_pixel_range::value_type> && Same<RndAccIma::const_reference, RndAccIma::const_value_range::value_type>;
- Refines the concept
WritableRandomAccessImage¶
-
template<typename
WRndAccIma>
conceptWritableRandomAccessImage¶ - Refines the concept
template <typename WBidirIma> WritableBidirectionalImage. - Refines the concept
template <typename WAccIma> WritableAccessibleImage. WRndAccIm::pixel_rangemodels both thetemplate <typename RndAccRng> RandomAccessRangeand thetemplate <typename SRng> SizedRangeconcept.WRndAccIm::value_rangemodels both thetemplate <typename RndAccRng> RandomAccessRangeand thetemplate <typename SRng> SizedRangeconcept.
Notation
..cpp:type:: WRndAccIm .. cpp:type:: pixel_range = WRndAccIm::pixel_range .. cpp:type:: value_range = WRndAccIm::value_range
Possible implementation
template <typename WRndAccIm, WRndAccIma = remove_cvref<WRndAccIm>> concept WritableRandomAccessImage = WritableBidirectionalImage<WRndAccIma> && WritableAccessibleImage<WRndAccIma> && RandomAccessImage<WRndAccIma> && RandomAccessRange<WRndAccIma::pixel_range> && RandomAccessRange<WRndAccIma::value_range> && SizedRange<WRndAccIma::pixel_range> && SizedRange<WRndAccIma::value_range> && Same<WRndAccIma::pixel_type, WRndAccIma::pixel_range::value_type> && Same<WRndAccIma::reference, WRndAccIma::value_range::value_type>;
- Refines the concept