| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /*
- Copyright 2007-2008 Andreas Pokorny, Christian Henning
- 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_IO_CONVERSION_POLICIES_HPP
- #define BOOST_GIL_IO_CONVERSION_POLICIES_HPP
- ////////////////////////////////////////////////////////////////////////////////////////
- /// \file
- /// \brief
- /// \author Andreas Pokorny, Christian Henning \n
- ///
- /// \date 2007-2008 \n
- ///
- ////////////////////////////////////////////////////////////////////////////////////////
- #include <algorithm>
- #include <iterator>
- #include <boost/gil/image_view_factory.hpp>
- namespace boost{namespace gil{ namespace detail {
- struct read_and_no_convert
- {
- public:
- typedef void* color_converter_type;
- template< typename InIterator
- , typename OutIterator
- >
- void read( const InIterator& /* begin */
- , const InIterator& /* end */
- , OutIterator /* out */
- , typename disable_if< typename pixels_are_compatible< typename std::iterator_traits<InIterator>::value_type
- , typename std::iterator_traits<OutIterator>::value_type
- >::type
- >::type* /* ptr */ = 0
- )
- {
- io_error( "Data cannot be copied because the pixels are incompatible." );
- }
- template< typename InIterator
- , typename OutIterator
- >
- void read( const InIterator& begin
- , const InIterator& end
- , OutIterator out
- , typename enable_if< typename pixels_are_compatible< typename std::iterator_traits<InIterator>::value_type
- , typename std::iterator_traits<OutIterator>::value_type
- >::type
- >::type* /* ptr */ = 0
- )
- {
- std::copy( begin
- , end
- , out
- );
- }
- };
- template<typename CC>
- struct read_and_convert
- {
- public:
- typedef CC color_converter_type;
- CC _cc;
- read_and_convert()
- {}
- read_and_convert( const color_converter_type& cc )
- : _cc( cc )
- {}
- template< typename InIterator
- , typename OutIterator
- >
- void read( const InIterator& begin
- , const InIterator& end
- , OutIterator out
- )
- {
- typedef color_convert_deref_fn< typename std::iterator_traits<InIterator>::reference
- , typename std::iterator_traits<OutIterator>::value_type //reference?
- , CC
- > deref_t;
- std::transform( begin
- , end
- , out
- , deref_t( _cc )
- );
- }
- };
- /// is_read_only metafunction
- /// \brief Determines if reader type is read only ( no conversion ).
- template< typename Conversion_Policy >
- struct is_read_only : mpl::false_ {};
- template<>
- struct is_read_only< detail::read_and_no_convert > : mpl::true_ {};
- } // namespace detail
- } // namespace gil
- } // namespace boost
- #endif
|