116struct homogeneous_color_base<Element, Layout, 2>
118 using layout_t = Layout;
122 typename U = Element,
123 typename =
typename std::enable_if<!std::is_reference<U>::value>::type
125 homogeneous_color_base() : v0_{}, v1_{} {}
127 explicit homogeneous_color_base(Element v) : v0_(v), v1_(v) {}
129 homogeneous_color_base(Element v0, Element v1) : v0_(v0), v1_(v1) {}
131 template <
typename E2,
typename L2>
132 homogeneous_color_base(homogeneous_color_base<E2, L2, 2>
const& c)
133 : v0_(gil::at_c<mapping_transform<Layout, L2, 0>::value>(c))
134 , v1_(gil::at_c<mapping_transform<Layout, L2, 1>::value>(c))
138 template <
typename E2,
typename L2>
139 homogeneous_color_base(homogeneous_color_base<E2, L2, 2>& c)
140 : v0_(gil::at_c<mapping_transform<Layout, L2, 0>::value>(c))
141 , v1_(gil::at_c<mapping_transform<Layout, L2, 1>::value>(c))
145 template <
typename P>
146 homogeneous_color_base(P* p,
bool)
147 : v0_(&semantic_at_c<0>(*p))
148 , v1_(&semantic_at_c<1>(*p))
152 template <
typename Ptr>
153 homogeneous_color_base(Ptr
const& ptr, std::ptrdiff_t diff)
154 : v0_(*memunit_advanced(semantic_at_c<0>(ptr), diff))
155 , v1_(*memunit_advanced(semantic_at_c<1>(ptr), diff))
158 template <
typename Ref>
161 return Ref(*semantic_at_c<0>(*
this), *semantic_at_c<1>(*
this));
164 auto at(std::integral_constant<int, 0>)
168 auto at(std::integral_constant<int, 0>)
const
172 auto at(std::integral_constant<int, 1>)
176 auto at(std::integral_constant<int, 1>)
const
181 auto at_c_dynamic(std::size_t i)
const -> Element
198struct homogeneous_color_base<Element, Layout, 3>
200 using layout_t = Layout;
204 typename U = Element,
205 typename =
typename std::enable_if<!std::is_reference<U>::value>::type
207 homogeneous_color_base() : v0_{}, v1_{}, v2_{} {}
209 explicit homogeneous_color_base(Element v) : v0_(v), v1_(v), v2_(v) {}
211 homogeneous_color_base(Element v0, Element v1, Element v2)
212 : v0_(v0), v1_(v1), v2_(v2)
215 template <
typename E2,
typename L2>
216 homogeneous_color_base(homogeneous_color_base<E2, L2, 3>
const& c)
217 : v0_(gil::at_c<mapping_transform<Layout, L2, 0>::value>(c))
218 , v1_(gil::at_c<mapping_transform<Layout, L2, 1>::value>(c))
219 , v2_(gil::at_c<mapping_transform<Layout, L2, 2>::value>(c))
223 template <
typename E2,
typename L2>
224 homogeneous_color_base(homogeneous_color_base<E2, L2, 3>& c)
225 : v0_(gil::at_c<mapping_transform<Layout, L2, 0>::value>(c))
226 , v1_(gil::at_c<mapping_transform<Layout, L2, 1>::value>(c))
227 , v2_(gil::at_c<mapping_transform<Layout, L2, 2>::value>(c))
231 template <
typename P>
232 homogeneous_color_base(P* p,
bool)
233 : v0_(&semantic_at_c<0>(*p))
234 , v1_(&semantic_at_c<1>(*p))
235 , v2_(&semantic_at_c<2>(*p))
239 template <
typename Ptr>
240 homogeneous_color_base(Ptr
const& ptr, std::ptrdiff_t diff)
241 : v0_(*memunit_advanced(semantic_at_c<0>(ptr), diff))
242 , v1_(*memunit_advanced(semantic_at_c<1>(ptr), diff))
243 , v2_(*memunit_advanced(semantic_at_c<2>(ptr), diff))
246 template <
typename Ref>
250 *semantic_at_c<0>(*
this),
251 *semantic_at_c<1>(*
this),
252 *semantic_at_c<2>(*
this));
255 auto at(std::integral_constant<int, 0>)
259 auto at(std::integral_constant<int, 0>)
const
263 auto at(std::integral_constant<int, 1>)
267 auto at(std::integral_constant<int, 1>)
const
271 auto at(std::integral_constant<int, 2>)
275 auto at(std::integral_constant<int, 2>)
const
280 auto at_c_dynamic(std::size_t i)
const -> Element
300struct homogeneous_color_base<Element, Layout, 4>
302 using layout_t = Layout;
306 typename U = Element,
307 typename =
typename std::enable_if<!std::is_reference<U>::value>::type
309 homogeneous_color_base() : v0_{}, v1_{}, v2_{}, v3_{} {}
311 explicit homogeneous_color_base(Element v) : v0_(v), v1_(v), v2_(v), v3_(v) {}
313 homogeneous_color_base(Element v0, Element v1, Element v2, Element v3)
314 : v0_(v0), v1_(v1), v2_(v2), v3_(v3)
317 template <
typename E2,
typename L2>
318 homogeneous_color_base(homogeneous_color_base<E2, L2, 4>
const& c)
319 : v0_(gil::at_c<mapping_transform<Layout, L2, 0>::value>(c))
320 , v1_(gil::at_c<mapping_transform<Layout, L2, 1>::value>(c))
321 , v2_(gil::at_c<mapping_transform<Layout, L2, 2>::value>(c))
322 , v3_(gil::at_c<mapping_transform<Layout, L2, 3>::value>(c))
326 template <
typename E2,
typename L2>
327 homogeneous_color_base(homogeneous_color_base<E2, L2, 4>& c)
328 : v0_(gil::at_c<mapping_transform<Layout, L2, 0>::value>(c))
329 , v1_(gil::at_c<mapping_transform<Layout, L2, 1>::value>(c))
330 , v2_(gil::at_c<mapping_transform<Layout, L2, 2>::value>(c))
331 , v3_(gil::at_c<mapping_transform<Layout, L2, 3>::value>(c))
335 template <
typename P>
336 homogeneous_color_base(P * p,
bool)
337 : v0_(&semantic_at_c<0>(*p))
338 , v1_(&semantic_at_c<1>(*p))
339 , v2_(&semantic_at_c<2>(*p))
340 , v3_(&semantic_at_c<3>(*p))
344 template <
typename Ptr>
345 homogeneous_color_base(Ptr
const& ptr, std::ptrdiff_t diff)
346 : v0_(*memunit_advanced(semantic_at_c<0>(ptr), diff))
347 , v1_(*memunit_advanced(semantic_at_c<1>(ptr), diff))
348 , v2_(*memunit_advanced(semantic_at_c<2>(ptr), diff))
349 , v3_(*memunit_advanced(semantic_at_c<3>(ptr), diff))
352 template <
typename Ref>
356 *semantic_at_c<0>(*
this),
357 *semantic_at_c<1>(*
this),
358 *semantic_at_c<2>(*
this),
359 *semantic_at_c<3>(*
this));
362 auto at(std::integral_constant<int, 0>)
366 auto at(std::integral_constant<int, 0>)
const
370 auto at(std::integral_constant<int, 1>)
374 auto at(std::integral_constant<int, 1>)
const
378 auto at(std::integral_constant<int, 2>)
382 auto at(std::integral_constant<int, 2>)
const
386 auto at(std::integral_constant<int, 3>)
390 auto at(std::integral_constant<int, 3>)
const
395 auto at_c_dynamic(std::size_t i)
const -> Element
417struct homogeneous_color_base<Element, Layout, 5>
419 using layout_t = Layout;
423 typename U = Element,
424 typename =
typename std::enable_if<!std::is_reference<U>::value>::type
426 homogeneous_color_base()
427 : v0_{}, v1_{}, v2_{}, v3_{}, v4_{}
430 explicit homogeneous_color_base(Element v)
431 : v0_(v), v1_(v), v2_(v), v3_(v), v4_(v)
434 homogeneous_color_base(Element v0, Element v1, Element v2, Element v3, Element v4)
435 : v0_(v0), v1_(v1), v2_(v2), v3_(v3), v4_(v4)
438 template <
typename E2,
typename L2>
439 homogeneous_color_base(homogeneous_color_base<E2, L2, 5>
const& c)
440 : v0_(gil::at_c<mapping_transform<Layout, L2, 0>::value>(c))
441 , v1_(gil::at_c<mapping_transform<Layout, L2, 1>::value>(c))
442 , v2_(gil::at_c<mapping_transform<Layout, L2, 2>::value>(c))
443 , v3_(gil::at_c<mapping_transform<Layout, L2, 3>::value>(c))
444 , v4_(gil::at_c<mapping_transform<Layout, L2, 4>::value>(c))
448 template <
typename E2,
typename L2>
449 homogeneous_color_base(homogeneous_color_base<E2, L2, 5>& c)
450 : v0_(gil::at_c<mapping_transform<Layout, L2, 0>::value>(c))
451 , v1_(gil::at_c<mapping_transform<Layout, L2, 1>::value>(c))
452 , v2_(gil::at_c<mapping_transform<Layout, L2, 2>::value>(c))
453 , v3_(gil::at_c<mapping_transform<Layout, L2, 3>::value>(c))
454 , v4_(gil::at_c<mapping_transform<Layout, L2, 4>::value>(c))
458 template <
typename P>
459 homogeneous_color_base(P* p,
bool)
460 : v0_(&semantic_at_c<0>(*p))
461 , v1_(&semantic_at_c<1>(*p))
462 , v2_(&semantic_at_c<2>(*p))
463 , v3_(&semantic_at_c<3>(*p))
464 , v4_(&semantic_at_c<4>(*p))
468 template <
typename Ptr>
469 homogeneous_color_base(Ptr
const& ptr, std::ptrdiff_t diff)
470 : v0_(*memunit_advanced(semantic_at_c<0>(ptr), diff))
471 , v1_(*memunit_advanced(semantic_at_c<1>(ptr), diff))
472 , v2_(*memunit_advanced(semantic_at_c<2>(ptr), diff))
473 , v3_(*memunit_advanced(semantic_at_c<3>(ptr), diff))
474 , v4_(*memunit_advanced(semantic_at_c<4>(ptr), diff))
478 auto at(std::integral_constant<int, 0>)
482 auto at(std::integral_constant<int, 0>)
const
486 auto at(std::integral_constant<int, 1>)
490 auto at(std::integral_constant<int, 1>)
const
494 auto at(std::integral_constant<int, 2>)
498 auto at(std::integral_constant<int, 2>)
const
502 auto at(std::integral_constant<int, 3>)
506 auto at(std::integral_constant<int, 3>)
const
510 auto at(std::integral_constant<int, 4>)
514 auto at(std::integral_constant<int, 4>)
const
518 template <
typename Ref>
522 *semantic_at_c<0>(*
this),
523 *semantic_at_c<1>(*
this),
524 *semantic_at_c<2>(*
this),
525 *semantic_at_c<3>(*
this),
526 *semantic_at_c<4>(*
this));
530 auto at_c_dynamic(std::size_t i)
const -> Element