9
3

view_type_from_pixel.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //
  2. // Copyright 2019 Mateusz Loskot <mateusz at loskot dot net>
  3. //
  4. // Distributed under the Boost Software License, Version 1.0
  5. // See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt
  7. //
  8. #include <boost/gil.hpp>
  9. #include <type_traits>
  10. namespace gil = boost::gil;
  11. struct Interleaved : std::false_type {};
  12. struct Planar : std::true_type {};
  13. struct NotStepX : std::false_type {};
  14. struct StepX : std::true_type {};
  15. struct Immutable : std::false_type {};
  16. struct Mutable : std::true_type {};
  17. template <typename ResultView, typename Pixel, typename IsPlanar, typename IsStepX, typename IsMutable>
  18. void test()
  19. {
  20. static_assert(std::is_same
  21. <
  22. typename gil::view_type_from_pixel
  23. <
  24. Pixel,
  25. IsPlanar::value,
  26. IsStepX::value,
  27. IsMutable::value
  28. >::type,
  29. ResultView
  30. >::value, "view_type_from_pixel yields unexpected view");
  31. }
  32. template <typename ResultView, typename Pixel, typename IsPlanar, typename IsStepX, typename IsMutable>
  33. void test_not()
  34. {
  35. static_assert(!std::is_same
  36. <
  37. typename gil::view_type_from_pixel
  38. <
  39. Pixel,
  40. IsPlanar::value,
  41. IsStepX::value,
  42. IsMutable::value
  43. >::type,
  44. ResultView
  45. >::value, "view_type_from_pixel yields unexpected view");
  46. }
  47. int main()
  48. {
  49. test<gil::gray8_view_t, gil::gray8_pixel_t, Interleaved, NotStepX, Mutable>();
  50. test<gil::gray8c_view_t, gil::gray8c_pixel_t, Interleaved, NotStepX, Immutable>();
  51. // Immutable view from mutable pixel type is allowed
  52. test<gil::gray8c_view_t, gil::gray8_pixel_t, Interleaved, NotStepX, Immutable>();
  53. // Mutable view from immutable pixel type not allowed
  54. test_not<gil::gray8_view_t, gil::gray8c_pixel_t, Interleaved, NotStepX, Mutable>();
  55. test<gil::gray8_step_view_t, gil::gray8_pixel_t, Interleaved, StepX, Mutable>();
  56. test_not<gil::gray8_view_t, gil::gray8c_pixel_t, Interleaved, NotStepX, Mutable>();
  57. test<gil::gray8c_step_view_t, gil::gray8_pixel_t, Interleaved, StepX, Immutable>();
  58. test_not<gil::gray8_view_t, gil::gray8_pixel_t, Planar, NotStepX, Mutable>();
  59. test_not<gil::gray8_view_t, gil::rgb8_pixel_t, Planar, NotStepX, Mutable>();
  60. test_not<gil::gray8_view_t, gil::gray8_pixel_t, Interleaved, StepX, Mutable>();
  61. test_not<gil::gray8_view_t, gil::gray8_pixel_t, Interleaved, NotStepX, Immutable>();
  62. test<gil::abgr8_view_t, gil::abgr8_pixel_t, Interleaved, NotStepX, Mutable>();
  63. test<gil::abgr8c_view_t, gil::abgr8_pixel_t, Interleaved, NotStepX, Immutable>();
  64. test<gil::abgr8_step_view_t, gil::abgr8_pixel_t, Interleaved, StepX, Mutable>();
  65. test<gil::abgr8c_step_view_t, gil::abgr8_pixel_t, Interleaved, StepX, Immutable>();
  66. test_not<gil::abgr8_view_t, gil::bgra8_pixel_t, Interleaved, NotStepX, Mutable>();
  67. test_not<gil::abgr8_view_t, gil::rgba8_pixel_t, Interleaved, NotStepX, Mutable>();
  68. test<gil::argb8_view_t, gil::argb8_pixel_t, Interleaved, NotStepX, Mutable>();
  69. test<gil::argb8c_view_t, gil::argb8_pixel_t, Interleaved, NotStepX, Immutable>();
  70. test<gil::argb8_step_view_t, gil::argb8_pixel_t, Interleaved, StepX, Mutable>();
  71. test<gil::argb8c_step_view_t, gil::argb8_pixel_t, Interleaved, StepX, Immutable>();
  72. test<gil::bgr8_view_t, gil::bgr8_pixel_t, Interleaved, NotStepX, Mutable>();
  73. test<gil::bgr8c_view_t, gil::bgr8_pixel_t, Interleaved, NotStepX, Immutable>();
  74. test<gil::bgr8_step_view_t, gil::bgr8_pixel_t, Interleaved, StepX, Mutable>();
  75. test<gil::bgr8c_step_view_t, gil::bgr8_pixel_t, Interleaved, StepX, Immutable>();
  76. test_not<gil::bgr8_view_t, gil::rgb8_pixel_t, Interleaved, NotStepX, Mutable>();
  77. test<gil::bgra8_view_t, gil::bgra8_pixel_t, Interleaved, NotStepX, Mutable>();
  78. test<gil::bgra8c_view_t, gil::bgra8_pixel_t, Interleaved, NotStepX, Immutable>();
  79. test<gil::bgra8_step_view_t, gil::bgra8_pixel_t, Interleaved, StepX, Mutable>();
  80. test<gil::bgra8c_step_view_t, gil::bgra8_pixel_t, Interleaved, StepX, Immutable>();
  81. test_not<gil::bgra8_view_t, gil::abgr8_pixel_t, Interleaved, NotStepX, Mutable>();
  82. test_not<gil::bgra8_view_t, gil::rgba8_pixel_t, Interleaved, NotStepX, Mutable>();
  83. test<gil::rgb8_view_t, gil::rgb8_pixel_t, Interleaved, NotStepX, Mutable>();
  84. test<gil::rgb8c_view_t, gil::rgb8_pixel_t, Interleaved, NotStepX, Immutable>();
  85. test<gil::rgb8_step_view_t, gil::rgb8_pixel_t, Interleaved, StepX, Mutable>();
  86. test<gil::rgb8c_step_view_t, gil::rgb8_pixel_t, Interleaved, StepX, Immutable>();
  87. test_not<gil::rgb8_view_t, gil::rgb8c_pixel_t, Interleaved, NotStepX, Mutable>();
  88. test_not<gil::rgb8_view_t, gil::rgb8_pixel_t, Planar, NotStepX, Mutable>();
  89. test_not<gil::rgb8_view_t, gil::abgr8_pixel_t, Interleaved, NotStepX, Mutable>();
  90. test_not<gil::rgb8_view_t, gil::bgra8_pixel_t, Interleaved, NotStepX, Mutable>();
  91. test<gil::rgb8_planar_view_t, gil::rgb8_pixel_t, Planar, NotStepX, Mutable>();
  92. test<gil::rgb8c_planar_view_t, gil::rgb8_pixel_t, Planar, NotStepX, Immutable>();
  93. test<gil::rgb8_planar_step_view_t, gil::rgb8_pixel_t, Planar, StepX, Mutable>();
  94. test<gil::rgb8c_planar_step_view_t, gil::rgb8_pixel_t, Planar, StepX, Immutable>();
  95. test<gil::cmyk8_view_t, gil::cmyk8_pixel_t, Interleaved, NotStepX, Mutable>();
  96. test<gil::cmyk8c_view_t, gil::cmyk8_pixel_t, Interleaved, NotStepX, Immutable>();
  97. test<gil::cmyk8_step_view_t, gil::cmyk8_pixel_t, Interleaved, StepX, Mutable>();
  98. test<gil::cmyk8c_step_view_t, gil::cmyk8_pixel_t, Interleaved, StepX, Immutable>();
  99. test_not<gil::cmyk8_view_t, gil::rgba8_pixel_t, Interleaved, NotStepX, Mutable>();
  100. test<gil::cmyk8_planar_view_t, gil::cmyk8_pixel_t, Planar, NotStepX, Mutable>();
  101. test<gil::cmyk8c_planar_view_t, gil::cmyk8_pixel_t, Planar, NotStepX, Immutable>();
  102. test<gil::cmyk8_planar_step_view_t, gil::cmyk8_pixel_t, Planar, StepX, Mutable>();
  103. test<gil::cmyk8c_planar_step_view_t, gil::cmyk8_pixel_t, Planar, StepX, Immutable>();
  104. }