summaryrefslogtreecommitdiff
path: root/boost/gil/extension/io/jpeg/detail/supported_types.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/gil/extension/io/jpeg/detail/supported_types.hpp')
-rw-r--r--boost/gil/extension/io/jpeg/detail/supported_types.hpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/boost/gil/extension/io/jpeg/detail/supported_types.hpp b/boost/gil/extension/io/jpeg/detail/supported_types.hpp
new file mode 100644
index 0000000000..209a99f857
--- /dev/null
+++ b/boost/gil/extension/io/jpeg/detail/supported_types.hpp
@@ -0,0 +1,121 @@
+/*
+ Copyright 2007-2008 Christian Henning, Andreas Pokorny, Lubomir Bourdev
+ Use, modification and distribution are subject to the Boost Software License,
+ Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+ http://www.boost.org/LICENSE_1_0.txt).
+*/
+
+/*************************************************************************************************/
+
+#ifndef BOOST_GIL_EXTENSION_IO_JPEG_DETAIL_SUPPORTED_TYPES_HPP
+#define BOOST_GIL_EXTENSION_IO_JPEG_DETAIL_SUPPORTED_TYPES_HPP
+
+////////////////////////////////////////////////////////////////////////////////////////
+/// \file
+/// \brief
+/// \author Christian Henning, Andreas Pokorny, Lubomir Bourdev \n
+///
+/// \date 2007-2008 \n
+///
+////////////////////////////////////////////////////////////////////////////////////////
+
+#include <boost/mpl/not.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+#include <boost/gil/channel.hpp>
+#include <boost/gil/color_base.hpp>
+
+namespace boost { namespace gil { namespace detail {
+
+// Read support
+
+template< jpeg_color_space::type ColorSpace >
+struct jpeg_rw_support_base
+{
+ static const jpeg_color_space::type _color_space = ColorSpace;
+};
+
+template< typename Channel
+ , typename ColorSpace
+ >
+struct jpeg_read_support : read_support_false
+ , jpeg_rw_support_base< JCS_UNKNOWN > {};
+
+template<>
+struct jpeg_read_support<uint8_t
+ , rgb_t
+ > : read_support_true
+ , jpeg_rw_support_base< JCS_RGB > {};
+
+template<>
+struct jpeg_read_support<uint8_t
+ , cmyk_t
+ > : read_support_true
+ , jpeg_rw_support_base< JCS_CMYK > {};
+
+template<>
+struct jpeg_read_support<uint8_t
+ , gray_t
+ > : read_support_true
+ , jpeg_rw_support_base< JCS_GRAYSCALE > {};
+
+// Write support
+
+template< typename Channel
+ , typename ColorSpace
+ >
+struct jpeg_write_support : write_support_false
+ , jpeg_rw_support_base< JCS_UNKNOWN > {};
+
+template<>
+struct jpeg_write_support<uint8_t
+ , gray_t
+ > : write_support_true
+ , jpeg_rw_support_base< JCS_GRAYSCALE > {};
+
+template<>
+struct jpeg_write_support<uint8_t
+ , rgb_t
+ > : write_support_true
+ , jpeg_rw_support_base< JCS_RGB > {};
+
+template<>
+struct jpeg_write_support<uint8_t
+ , cmyk_t
+ > : write_support_true
+ , jpeg_rw_support_base< JCS_CMYK > {};
+
+} // namespace detail
+
+template< typename Pixel >
+struct is_read_supported< Pixel
+ , jpeg_tag
+ >
+ : mpl::bool_< detail::jpeg_read_support< typename channel_type< Pixel >::type
+ , typename color_space_type< Pixel >::type
+ >::is_supported
+ >
+{
+ typedef detail::jpeg_read_support< typename channel_type< Pixel >::type
+ , typename color_space_type< Pixel >::type
+ > parent_t;
+
+ static const typename jpeg_color_space::type _color_space = parent_t::_color_space;
+};
+
+template< typename Pixel >
+struct is_write_supported< Pixel
+ , jpeg_tag
+ >
+ : mpl::bool_< detail::jpeg_write_support< typename channel_type< Pixel >::type
+ , typename color_space_type< Pixel >::type
+ >::is_supported
+ >
+{};
+
+
+} // namespace gil
+} // namespace boost
+
+
+#endif