⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bind.hpp

📁 system C源码 一种替代verilog的语言
💻 HPP
📖 第 1 页 / 共 4 页
字号:
#ifndef BOOST_BIND_HPP_INCLUDED#define BOOST_BIND_HPP_INCLUDED// MS compatible compilers support #pragma once#if defined(_MSC_VER) && (_MSC_VER >= 1020)# pragma once#endif////  bind.hpp - binds function objects to arguments////  Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.//  Copyright (c) 2001 David Abrahams//  Copyright (c) 2005 Peter Dimov//// 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://www.boost.org/libs/bind/bind.html for documentation.//#include <sysc/packages/boost/config.hpp>#include <sysc/packages/boost/ref.hpp>#include <sysc/packages/boost/mem_fn.hpp>#include <sysc/packages/boost/type.hpp>#include <sysc/packages/boost/bind/arg.hpp>#include <sysc/packages/boost/detail/workaround.hpp>// Borland-specific bug, visit_each() silently fails to produce code#if defined(__BORLANDC__)#  define BOOST_BIND_VISIT_EACH boost::visit_each#else#  define BOOST_BIND_VISIT_EACH visit_each#endif#ifdef BOOST_MSVC# pragma warning(push)# pragma warning(disable: 4512) // assignment operator could not be generated#endifnamespace boost{namespace _bi // implementation details{// result_traitstemplate<class R, class F> struct result_traits{    typedef R type;};#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)struct unspecified {};template<class F> struct result_traits<unspecified, F>{    typedef typename F::result_type type;};template<class F> struct result_traits< unspecified, reference_wrapper<F> >{    typedef typename F::result_type type;};#endif// ref_comparetemplate<class T> bool ref_compare(T const & a, T const & b, long){    return a == b;}template<class T> bool ref_compare(reference_wrapper<T> const & a, reference_wrapper<T> const & b, int){    return a.get_pointer() == b.get_pointer();}// bind_t forward declaration for listNtemplate<class R, class F, class L> class bind_t;// valuetemplate<class T> class value{public:    value(T const & t): t_(t) {}    T & get() { return t_; }    T const & get() const { return t_; }    bool operator==(value const & rhs) const    {        return t_ == rhs.t_;    }private:    T t_;};// typetemplate<class T> class type {};// unwraptemplate<class F> inline F & unwrap(F * f, long){    return *f;}template<class F> inline F & unwrap(reference_wrapper<F> * f, int){    return f->get();}template<class F> inline F & unwrap(reference_wrapper<F> const * f, int){    return f->get();}#if !( defined(__MWERKS__) && BOOST_WORKAROUND(__MWERKS__, <= 0x3004) )template<class R, class T> inline _mfi::dm<R, T> unwrap(R T::* * pm, int){    return _mfi::dm<R, T>(*pm);}#if !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))// IBM/VisualAge 6.0 is not able to handle this overload.template<class R, class T> inline _mfi::dm<R, T> unwrap(R T::* const * pm, int){    return _mfi::dm<R, T>(*pm);}#endif#endif// listNclass list0{public:    list0() {}    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }    template<class R, class F, class A> R operator()(type<R>, F & f, A &, long)    {        return unwrap(&f, 0)();    }    template<class R, class F, class A> R operator()(type<R>, F const & f, A &, long) const    {        return unwrap(&f, 0)();    }    template<class F, class A> void operator()(type<void>, F & f, A &, int)    {        unwrap(&f, 0)();    }    template<class F, class A> void operator()(type<void>, F const & f, A &, int) const    {        unwrap(&f, 0)();    }    template<class V> void accept(V &) const    {    }    bool operator==(list0 const &) const    {        return true;    }};template<class A1> class list1{public:    explicit list1(A1 a1): a1_(a1) {}    A1 operator[] (boost::arg<1>) const { return a1_; }    A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }    template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }    template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)    {        return unwrap(&f, 0)(a[a1_]);    }    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const    {        return unwrap(&f, 0)(a[a1_]);    }    template<class F, class A> void operator()(type<void>, F & f, A & a, int)    {        unwrap(&f, 0)(a[a1_]);    }    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const    {        unwrap(&f, 0)(a[a1_]);    }    template<class V> void accept(V & v) const    {        BOOST_BIND_VISIT_EACH(v, a1_, 0);    }    bool operator==(list1 const & rhs) const    {        return ref_compare(a1_, rhs.a1_, 0);    }private:    A1 a1_;};template<class A1, class A2> class list2{public:    list2(A1 a1, A2 a2): a1_(a1), a2_(a2) {}    A1 operator[] (boost::arg<1>) const { return a1_; }    A2 operator[] (boost::arg<2>) const { return a2_; }    A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }    A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)    {        return unwrap(&f, 0)(a[a1_], a[a2_]);    }    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const    {        return unwrap(&f, 0)(a[a1_], a[a2_]);    }    template<class F, class A> void operator()(type<void>, F & f, A & a, int)    {        unwrap(&f, 0)(a[a1_], a[a2_]);    }    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const    {        unwrap(&f, 0)(a[a1_], a[a2_]);    }    template<class V> void accept(V & v) const    {        BOOST_BIND_VISIT_EACH(v, a1_, 0);        BOOST_BIND_VISIT_EACH(v, a2_, 0);    }    bool operator==(list2 const & rhs) const    {        return ref_compare(a1_, rhs.a1_, 0) && ref_compare(a2_, rhs.a2_, 0);    }private:    A1 a1_;    A2 a2_;};template<class A1, class A2, class A3> class list3{public:    list3(A1 a1, A2 a2, A3 a3): a1_(a1), a2_(a2), a3_(a3) {}    A1 operator[] (boost::arg<1>) const { return a1_; }    A2 operator[] (boost::arg<2>) const { return a2_; }    A3 operator[] (boost::arg<3>) const { return a3_; }    A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }    A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }    A3 operator[] (boost::arg<3> (*) ()) const { return a3_; }    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)    {        return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_]);    }    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const    {        return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_]);    }    template<class F, class A> void operator()(type<void>, F & f, A & a, int)    {        unwrap(&f, 0)(a[a1_], a[a2_], a[a3_]);    }    template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const    {        unwrap(&f, 0)(a[a1_], a[a2_], a[a3_]);    }    template<class V> void accept(V & v) const    {        BOOST_BIND_VISIT_EACH(v, a1_, 0);        BOOST_BIND_VISIT_EACH(v, a2_, 0);        BOOST_BIND_VISIT_EACH(v, a3_, 0);    }    bool operator==(list3 const & rhs) const    {        return ref_compare(a1_, rhs.a1_, 0) && ref_compare(a2_, rhs.a2_, 0) && ref_compare(a3_, rhs.a3_, 0);    }private:    A1 a1_;    A2 a2_;    A3 a3_;};template<class A1, class A2, class A3, class A4> class list4{public:    list4(A1 a1, A2 a2, A3 a3, A4 a4): a1_(a1), a2_(a2), a3_(a3), a4_(a4) {}    A1 operator[] (boost::arg<1>) const { return a1_; }    A2 operator[] (boost::arg<2>) const { return a2_; }    A3 operator[] (boost::arg<3>) const { return a3_; }    A4 operator[] (boost::arg<4>) const { return a4_; }    A1 operator[] (boost::arg<1> (*) ()) const { return a1_; }    A2 operator[] (boost::arg<2> (*) ()) const { return a2_; }    A3 operator[] (boost::arg<3> (*) ()) const { return a3_; }    A4 operator[] (boost::arg<4> (*) ()) const { return a4_; }    template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }    template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }    template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }    template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }    template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)    {        return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_]);    }    template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const    {        return unwrap(&f, 0)(a[a1_], a[a2_], a[a3_], a[a4_]);    }    template<class F, class A> void operator()(type<void>, F & f, A & a, int)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -