]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/gil/extension/dynamic_image/algorithm.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / gil / extension / dynamic_image / algorithm.hpp
index dffd399918468467272f1ece478a4f484ff374bc..987b8eeb6ce289ebb72570bbf91f4f3c129986e7 100644 (file)
@@ -1,23 +1,21 @@
-/*
-    Copyright 2005-2007 Adobe Systems Incorporated
-   
-    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).
+//
+// Copyright 2005-2007 Adobe Systems Incorporated
+//
+// Distributed under 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_DYNAMIC_IMAGE_ALGORITHM_HPP
+#define BOOST_GIL_EXTENSION_DYNAMIC_IMAGE_ALGORITHM_HPP
 
-    See http://opensource.adobe.com/gil for most recent version including documentation.
-*/
-/*************************************************************************************************/
+#include <boost/gil/extension/dynamic_image/any_image.hpp>
 
-#ifndef GIL_DYNAMICIMAGE_ALGORITHM_HPP
-#define GIL_DYNAMICIMAGE_ALGORITHM_HPP
+#include <boost/gil/algorithm.hpp>
 
-#include "../../algorithm.hpp"
-#include "any_image.hpp"
-#include <boost/bind.hpp>
+#include <functional>
 
 ////////////////////////////////////////////////////////////////////////////////////////
-/// \file               
+/// \file
 /// \brief Some basic STL-style algorithms when applied to runtime type specified image views
 /// \author Lubomir Bourdev and Hailin Jin \n
 ///         Adobe Systems Incorporated
 namespace boost { namespace gil {
 
 namespace detail {
-    struct equal_pixels_fn : public binary_operation_obj<equal_pixels_fn,bool> {
-        template <typename V1, typename V2>
-        GIL_FORCEINLINE bool apply_compatible(const V1& v1, const V2& v2) const {
-            return equal_pixels(v1,v2);
-        }
-    };
+
+struct equal_pixels_fn : binary_operation_obj<equal_pixels_fn, bool>
+{
+    template <typename V1, typename V2>
+    BOOST_FORCEINLINE
+    bool apply_compatible(V1 const& v1, V2 const& v2) const
+    {
+        return equal_pixels(v1, v2);
+    }
+};
+
 } // namespace detail
 
 /// \ingroup ImageViewSTLAlgorithmsEqualPixels
-template <typename Types1,  // Model MPL Random Access Container of models of ImageViewConcept
-          typename View2>   // Model MutableImageViewConcept
-bool equal_pixels(const any_image_view<Types1>& src, const View2& dst) {
-    return apply_operation(src,boost::bind(detail::equal_pixels_fn(), _1, dst));
+/// \tparam Types Model Boost.MP11-compatible list of models of ImageViewConcept
+/// \tparam View Model MutableImageViewConcept
+template <typename Types, typename View>
+bool equal_pixels(any_image_view<Types> const& src, View const& dst)
+{
+    return apply_operation(
+        src,
+        std::bind(detail::equal_pixels_fn(), std::placeholders::_1, dst));
 }
 
 /// \ingroup ImageViewSTLAlgorithmsEqualPixels
-template <typename View1,   // Model ImageViewConcept
-          typename Types2>  // Model MPL Random Access Container of models of MutableImageViewConcept
-bool equal_pixels(const View1& src, const any_image_view<Types2>& dst) {
-    return apply_operation(dst,boost::bind(detail::equal_pixels_fn(), src, _1));
+/// \tparam View Model ImageViewConcept
+/// \tparam Types Model Boost.MP11-compatible list of models of MutableImageViewConcept
+template <typename View, typename Types>
+bool equal_pixels(View const& src, any_image_view<Types> const& dst)
+{
+    return apply_operation(
+        dst,
+        std::bind(detail::equal_pixels_fn(), src, std::placeholders::_1));
 }
 
 /// \ingroup ImageViewSTLAlgorithmsEqualPixels
-template <typename Types1,  // Model MPL Random Access Container of models of ImageViewConcept
-          typename Types2>  // Model MPL Random Access Container of models of MutableImageViewConcept
-bool equal_pixels(const any_image_view<Types1>& src, const any_image_view<Types2>& dst) {
-    return apply_operation(src,dst,detail::equal_pixels_fn());
+/// \tparam Types1 Model Boost.MP11-compatible list of models of ImageViewConcept
+/// \tparam Types2 Model Boost.MP11-compatible list of models of MutableImageViewConcept
+template <typename Types1, typename Types2>
+bool equal_pixels(any_image_view<Types1> const& src, any_image_view<Types2> const& dst)
+{
+    return apply_operation(src, dst, detail::equal_pixels_fn());
 }
 
 namespace detail {
-    struct copy_pixels_fn : public binary_operation_obj<copy_pixels_fn> {
-        template <typename View1, typename View2>
-        GIL_FORCEINLINE void apply_compatible(const View1& src, const View2& dst) const {
-            copy_pixels(src,dst);
-        }
-    };
-}
+
+struct copy_pixels_fn : public binary_operation_obj<copy_pixels_fn>
+{
+    template <typename View1, typename View2>
+    BOOST_FORCEINLINE
+    void apply_compatible(View1 const& src, View2 const& dst) const
+    {
+        copy_pixels(src,dst);
+    }
+};
+
+} // namespace detail
 
 /// \ingroup ImageViewSTLAlgorithmsCopyPixels
-template <typename Types1,  // Model MPL Random Access Container of models of ImageViewConcept
-          typename View2>   // Model MutableImageViewConcept
-void copy_pixels(const any_image_view<Types1>& src, const View2& dst) {
-    apply_operation(src,boost::bind(detail::copy_pixels_fn(), _1, dst));
+/// \tparam Types Model Boost.MP11-compatible list of models of ImageViewConcept
+/// \tparam View Model MutableImageViewConcept
+template <typename Types, typename View>
+void copy_pixels(any_image_view<Types> const& src, View const& dst)
+{
+    apply_operation(src, std::bind(detail::copy_pixels_fn(), std::placeholders::_1, dst));
 }
 
 /// \ingroup ImageViewSTLAlgorithmsCopyPixels
-template <typename View1,   // Model ImageViewConcept
-          typename Types2>  // Model MPL Random Access Container of models of MutableImageViewConcept
-void copy_pixels(const View1& src, const any_image_view<Types2>& dst) {
-    apply_operation(dst,boost::bind(detail::copy_pixels_fn(), src, _1));
+/// \tparam Types Model Boost.MP11-compatible list of models of MutableImageViewConcept
+/// \tparam View Model ImageViewConcept
+template <typename Types, typename View>
+void copy_pixels(View const& src, any_image_view<Types> const& dst)
+{
+    apply_operation(dst, std::bind(detail::copy_pixels_fn(), src, std::placeholders::_1));
 }
 
 /// \ingroup ImageViewSTLAlgorithmsCopyPixels
-template <typename Types1,  // Model MPL Random Access Container of models of ImageViewConcept
-          typename Types2>  // Model MPL Random Access Container of models of MutableImageViewConcept
-void copy_pixels(const any_image_view<Types1>& src, const any_image_view<Types2>& dst) {
-    apply_operation(src,dst,detail::copy_pixels_fn());
+/// \tparam Types1 Model Boost.MP11-compatible list of models of ImageViewConcept
+/// \tparam Types2 Model Boost.MP11-compatible list of models of MutableImageViewConcept
+template <typename Types1, typename Types2>
+void copy_pixels(any_image_view<Types1> const& src, any_image_view<Types2> const& dst)
+{
+    apply_operation(src, dst, detail::copy_pixels_fn());
 }
 
-
-
 //forward declaration for default_color_converter (see full definition in color_convert.hpp)
 struct default_color_converter;
 
 /// \ingroup ImageViewSTLAlgorithmsCopyAndConvertPixels
-template <typename Types1,  // Model MPL Random Access Container of models of ImageViewConcept
-          typename View2,   // Model MutableImageViewConcept
-          typename CC>      // Model ColorConverterConcept
-void copy_and_convert_pixels(const any_image_view<Types1>& src, const View2& dst, CC cc) {
-    apply_operation(src,boost::bind(detail::copy_and_convert_pixels_fn<CC>(cc), _1, dst));
+/// \tparam Types Model Boost.MP11-compatible list of models of ImageViewConcept
+/// \tparam View Model MutableImageViewConcept
+/// \tparam CC Model ColorConverterConcept
+template <typename Types, typename View, typename CC>
+void copy_and_convert_pixels(any_image_view<Types> const& src, View const& dst, CC cc)
+{
+    using cc_fn = detail::copy_and_convert_pixels_fn<CC>;
+    apply_operation(src, std::bind(cc_fn{cc}, std::placeholders::_1, dst));
 }
 
 /// \ingroup ImageViewSTLAlgorithmsCopyAndConvertPixels
-template <typename Types1,  // Model MPL Random Access Container of models of ImageViewConcept
-          typename View2>   // Model MutableImageViewConcept
-void copy_and_convert_pixels(const any_image_view<Types1>& src, const View2& dst) {
-    apply_operation(src,boost::bind(detail::copy_and_convert_pixels_fn<default_color_converter>(), _1, dst));
+/// \tparam Types Model Boost.MP11-compatible list of models of ImageViewConcept
+/// \tparam View Model MutableImageViewConcept
+template <typename Types, typename View>
+void copy_and_convert_pixels(any_image_view<Types> const& src, View const& dst)
+{
+    using cc_fn = detail::copy_and_convert_pixels_fn<default_color_converter>;
+    apply_operation(src, std::bind(cc_fn{}, std::placeholders::_1, dst));
 }
 
 /// \ingroup ImageViewSTLAlgorithmsCopyAndConvertPixels
-template <typename View1,   // Model ImageViewConcept
-          typename Types2,  // Model MPL Random Access Container of models of MutableImageViewConcept
-          typename CC>      // Model ColorConverterConcept
-void copy_and_convert_pixels(const View1& src, const any_image_view<Types2>& dst, CC cc) {
-    apply_operation(dst,boost::bind(detail::copy_and_convert_pixels_fn<CC>(cc), src, _1));
+/// \tparam View Model ImageViewConcept
+/// \tparam Types Model Boost.MP11-compatible list of models of MutableImageViewConcept
+/// \tparam CC Model ColorConverterConcept
+template <typename View, typename Types, typename CC>
+void copy_and_convert_pixels(View const& src, any_image_view<Types> const& dst, CC cc)
+{
+    using cc_fn = detail::copy_and_convert_pixels_fn<CC>;
+    apply_operation(dst, std::bind(cc_fn{cc}, src, std::placeholders::_1));
 }
 
 /// \ingroup ImageViewSTLAlgorithmsCopyAndConvertPixels
-template <typename View1,   // Model ImageViewConcept
-          typename Types2>  // Model MPL Random Access Container of models of MutableImageViewConcept
-void copy_and_convert_pixels(const View1& src, const any_image_view<Types2>& dst) {
-    apply_operation(dst,boost::bind(detail::copy_and_convert_pixels_fn<default_color_converter>(), src, _1));
+/// \tparam View Model ImageViewConcept
+/// \tparam Type Model Boost.MP11-compatible list of models of MutableImageViewConcept
+template <typename View, typename Types>
+void copy_and_convert_pixels(View const& src, any_image_view<Types> const& dst)
+{
+    using cc_fn = detail::copy_and_convert_pixels_fn<default_color_converter>;
+    apply_operation(dst, std::bind(cc_fn{}, src, std::placeholders::_1));
 }
 
 /// \ingroup ImageViewSTLAlgorithmsCopyAndConvertPixels
-template <typename Types1,  // Model MPL Random Access Container of models of ImageViewConcept
-          typename Types2,  // Model MPL Random Access Container of models of MutableImageViewConcept
-          typename CC>      // Model ColorConverterConcept
-void copy_and_convert_pixels(const any_image_view<Types1>& src, const any_image_view<Types2>& dst, CC cc) {
-    apply_operation(src,dst,detail::copy_and_convert_pixels_fn<CC>(cc));
+/// \tparam Types1 Model Boost.MP11-compatible list of models of ImageViewConcept
+/// \tparam Types2 Model Boost.MP11-compatible list of models of MutableImageViewConcept
+/// \tparam CC Model ColorConverterConcept
+template <typename Types1, typename Types2, typename CC>
+void copy_and_convert_pixels(
+    any_image_view<Types1> const& src,
+    any_image_view<Types2> const& dst, CC cc)
+{
+    apply_operation(src, dst, detail::copy_and_convert_pixels_fn<CC>(cc));
 }
 
 /// \ingroup ImageViewSTLAlgorithmsCopyAndConvertPixels
-template <typename Types1,  // Model MPL Random Access Container of models of ImageViewConcept
-          typename Types2>  // Model MPL Random Access Container of models of MutableImageViewConcept
-void copy_and_convert_pixels(const any_image_view<Types1>& src, const any_image_view<Types2>& dst) {
-    apply_operation(src,dst,detail::copy_and_convert_pixels_fn<default_color_converter>());
+/// \tparam Types1 Model Boost.MP11-compatible list of models of ImageViewConcept
+/// \tparam Types2 Model Boost.MP11-compatible list of models of MutableImageViewConcept
+template <typename Types1, typename Types2>
+void copy_and_convert_pixels(
+    any_image_view<Types1> const& src,
+    any_image_view<Types2> const& dst)
+{
+    apply_operation(src, dst,
+        detail::copy_and_convert_pixels_fn<default_color_converter>());
 }
 
 namespace detail {
-template <bool COMPATIBLE> struct fill_pixels_fn1 {
-    template <typename V, typename Value> static void apply(const V& src, const Value& val) { fill_pixels(src,val); }
+
+template <bool IsCompatible>
+struct fill_pixels_fn1
+{
+    template <typename V, typename Value>
+    static void apply(V const &src, Value const &val) { fill_pixels(src, val); }
 };
 
 // copy_pixels invoked on incompatible images
-template <> struct fill_pixels_fn1<false> {
-    template <typename V, typename Value> static void apply(const V& src, const Value& val) { throw std::bad_cast();}
+template <>
+struct fill_pixels_fn1<false>
+{
+    template <typename V, typename Value>
+    static void apply(V const &, Value const &) { throw std::bad_cast();}
 };
 
 template <typename Value>
-struct fill_pixels_fn {
-    fill_pixels_fn(const Value& val) : _val(val) {}
-
-    typedef void result_type;
-    template <typename V> result_type operator()(const V& img_view) const {
-        fill_pixels_fn1<pixels_are_compatible<typename V::value_type, Value>::value>::apply(img_view,_val);
+struct fill_pixels_fn
+{
+    fill_pixels_fn(Value const& val) : val_(val) {}
+
+    using result_type = void;
+    template <typename V>
+    result_type operator()(V const& view) const
+    {
+        fill_pixels_fn1
+        <
+            pixels_are_compatible
+            <
+                typename V::value_type,
+                Value
+            >::value
+        >::apply(view, val_);
     }
-    Value _val;
+
+    Value val_;
 };
-}
+
+} // namespace detail
 
 /// \ingroup ImageViewSTLAlgorithmsFillPixels
 /// \brief fill_pixels for any image view. The pixel to fill with must be compatible with the current view
-template <typename Types, // Model MPL Random Access Container of models of MutableImageViewConcept
-          typename Value>
-void fill_pixels(const any_image_view<Types>& img_view, const Value& val) {
-    apply_operation(img_view,detail::fill_pixels_fn<Value>(val));
+/// \tparam Types Model Boost.MP11-compatible list of models of MutableImageViewConcept
+template <typename Types, typename Value>
+void fill_pixels(any_image_view<Types> const& view, Value const& val)
+{
+    apply_operation(view, detail::fill_pixels_fn<Value>(val));
 }
 
-
-} }  // namespace boost::gil
+}}  // namespace boost::gil
 
 #endif