![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/boost/compute/functional/ |
Upload File : |
//---------------------------------------------------------------------------// // Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com> // // 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 // // See http://boostorg.github.com/compute for more information. //---------------------------------------------------------------------------// #ifndef BOOST_COMPUTE_FUNCTIONAL_LOGICAL_HPP #define BOOST_COMPUTE_FUNCTIONAL_LOGICAL_HPP namespace boost { namespace compute { namespace detail { template<class Predicate, class Expr> class invoked_unary_negate_function { public: typedef int result_type; invoked_unary_negate_function(const Predicate &pred, const Expr &expr) : m_pred(pred), m_expr(expr) { } Predicate pred() const { return m_pred; } Expr expr() const { return m_expr; } private: Predicate m_pred; Expr m_expr; }; template<class Predicate, class Expr1, class Expr2> class invoked_binary_negate_function { public: typedef int result_type; invoked_binary_negate_function(const Predicate &pred, const Expr1 &expr1, const Expr2 &expr2) : m_pred(pred), m_expr1(expr1), m_expr2(expr2) { } Predicate pred() const { return m_pred; } Expr1 expr1() const { return m_expr1; } Expr2 expr2() const { return m_expr2; } private: Predicate m_pred; Expr1 m_expr1; Expr2 m_expr2; }; } // end detail namespace /// \internal_ template<class Arg, class Result> struct unary_function { typedef Arg argument_type; typedef Result result_type; }; /// \internal_ template<class Arg1, class Arg2, class Result> struct binary_function { typedef Arg1 first_argument_type; typedef Arg2 second_argument_type; typedef Result result_type; }; /// \internal_ template<class Arg1, class Arg2, class Arg3, class Result> struct ternary_function { typedef Arg1 first_argument_type; typedef Arg2 second_argument_type; typedef Arg3 third_argument_type; typedef Result result_type; }; /// The unary_negate function adaptor negates a unary function. /// /// \see not1() template<class Predicate> class unary_negate : public unary_function<void, int> { public: explicit unary_negate(Predicate pred) : m_pred(pred) { } /// \internal_ template<class Arg> detail::invoked_unary_negate_function<Predicate, Arg> operator()(const Arg &arg) const { return detail::invoked_unary_negate_function< Predicate, Arg >(m_pred, arg); } private: Predicate m_pred; }; /// The binnary_negate function adaptor negates a binary function. /// /// \see not2() template<class Predicate> class binary_negate : public binary_function<void, void, int> { public: explicit binary_negate(Predicate pred) : m_pred(pred) { } /// \internal_ template<class Arg1, class Arg2> detail::invoked_binary_negate_function<Predicate, Arg1, Arg2> operator()(const Arg1 &arg1, const Arg2 &arg2) const { return detail::invoked_binary_negate_function< Predicate, Arg1, Arg2 >(m_pred, arg1, arg2); } private: Predicate m_pred; }; /// Returns a unary_negate adaptor around \p predicate. /// /// \param predicate the unary function to wrap /// /// \return a unary_negate wrapper around \p predicate template<class Predicate> inline unary_negate<Predicate> not1(const Predicate &predicate) { return unary_negate<Predicate>(predicate); } /// Returns a binary_negate adaptor around \p predicate. /// /// \param predicate the binary function to wrap /// /// \return a binary_negate wrapper around \p predicate template<class Predicate> inline binary_negate<Predicate> not2(const Predicate &predicate) { return binary_negate<Predicate>(predicate); } /// The logical_not function negates its argument and returns it. /// /// \see not1(), not2() template<class T> struct logical_not : public unary_function<T, int> { /// \internal_ template<class Expr> detail::invoked_function<int, boost::tuple<Expr> > operator()(const Expr &expr) const { return detail::invoked_function<int, boost::tuple<Expr> >( "!", std::string(), boost::make_tuple(expr) ); } }; } // end compute namespace } // end boost namespace #endif // BOOST_COMPUTE_FUNCTIONAL_LOGICAL_HPP