mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			389 lines
		
	
	
	
		
			7.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			389 lines
		
	
	
	
		
			7.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED
 | 
						|
#define BOOST_BIND_MEM_FN_HPP_INCLUDED
 | 
						|
 | 
						|
// MS compatible compilers support #pragma once
 | 
						|
 | 
						|
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
 | 
						|
# pragma once
 | 
						|
#endif
 | 
						|
 | 
						|
//
 | 
						|
//  mem_fn.hpp - a generalization of std::mem_fun[_ref]
 | 
						|
//
 | 
						|
//  Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
 | 
						|
//  Copyright (c) 2001 David Abrahams
 | 
						|
//  Copyright (c) 2003-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/mem_fn.html for documentation.
 | 
						|
//
 | 
						|
 | 
						|
#include <boost/config.hpp>
 | 
						|
#include <boost/get_pointer.hpp>
 | 
						|
#include <boost/detail/workaround.hpp>
 | 
						|
 | 
						|
namespace boost
 | 
						|
{
 | 
						|
 | 
						|
#if defined(BOOST_NO_VOID_RETURNS)
 | 
						|
 | 
						|
#define BOOST_MEM_FN_CLASS_F , class F
 | 
						|
#define BOOST_MEM_FN_TYPEDEF(X)
 | 
						|
 | 
						|
namespace _mfi // mem_fun_impl
 | 
						|
{
 | 
						|
 | 
						|
template<class V> struct mf
 | 
						|
{
 | 
						|
 | 
						|
#define BOOST_MEM_FN_RETURN return
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) inner_##X
 | 
						|
#define BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_CDECL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
 | 
						|
#define BOOST_MEM_FN_CC __cdecl
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_STDCALL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
 | 
						|
#define BOOST_MEM_FN_CC __stdcall
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
 | 
						|
#define BOOST_MEM_FN_CC __fastcall
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_RETURN
 | 
						|
 | 
						|
}; // struct mf<V>
 | 
						|
 | 
						|
template<> struct mf<void>
 | 
						|
{
 | 
						|
 | 
						|
#define BOOST_MEM_FN_RETURN
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) inner_##X
 | 
						|
#define BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_CDECL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) inner_##X##_cdecl
 | 
						|
#define BOOST_MEM_FN_CC __cdecl
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_STDCALL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) inner_##X##_stdcall
 | 
						|
#define BOOST_MEM_FN_CC __stdcall
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) inner_##X##_fastcall
 | 
						|
#define BOOST_MEM_FN_CC __fastcall
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_RETURN
 | 
						|
 | 
						|
}; // struct mf<void>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CLASS_F
 | 
						|
#undef BOOST_MEM_FN_TYPEDEF_F
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X
 | 
						|
#define BOOST_MEM_FN_NAME2(X) inner_##X
 | 
						|
#define BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_vw.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
#undef BOOST_MEM_FN_NAME2
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_CDECL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X##_cdecl
 | 
						|
#define BOOST_MEM_FN_NAME2(X) inner_##X##_cdecl
 | 
						|
#define BOOST_MEM_FN_CC __cdecl
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_vw.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
#undef BOOST_MEM_FN_NAME2
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_STDCALL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X##_stdcall
 | 
						|
#define BOOST_MEM_FN_NAME2(X) inner_##X##_stdcall
 | 
						|
#define BOOST_MEM_FN_CC __stdcall
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_vw.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
#undef BOOST_MEM_FN_NAME2
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X##_fastcall
 | 
						|
#define BOOST_MEM_FN_NAME2(X) inner_##X##_fastcall
 | 
						|
#define BOOST_MEM_FN_CC __fastcall
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_vw.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
#undef BOOST_MEM_FN_NAME2
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
} // namespace _mfi
 | 
						|
 | 
						|
#else // #ifdef BOOST_NO_VOID_RETURNS
 | 
						|
 | 
						|
#define BOOST_MEM_FN_CLASS_F
 | 
						|
#define BOOST_MEM_FN_TYPEDEF(X) typedef X;
 | 
						|
 | 
						|
namespace _mfi
 | 
						|
{
 | 
						|
 | 
						|
#define BOOST_MEM_FN_RETURN return
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X
 | 
						|
#define BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_CDECL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X##_cdecl
 | 
						|
#define BOOST_MEM_FN_CC __cdecl
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_STDCALL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X##_stdcall
 | 
						|
#define BOOST_MEM_FN_CC __stdcall
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X##_fastcall
 | 
						|
#define BOOST_MEM_FN_CC __fastcall
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_template.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_RETURN
 | 
						|
 | 
						|
} // namespace _mfi
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_CLASS_F
 | 
						|
#undef BOOST_MEM_FN_TYPEDEF
 | 
						|
 | 
						|
#endif // #ifdef BOOST_NO_VOID_RETURNS
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X
 | 
						|
#define BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_cc.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_CDECL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X##_cdecl
 | 
						|
#define BOOST_MEM_FN_CC __cdecl
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_cc.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_STDCALL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X##_stdcall
 | 
						|
#define BOOST_MEM_FN_CC __stdcall
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_cc.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef BOOST_MEM_FN_ENABLE_FASTCALL
 | 
						|
 | 
						|
#define BOOST_MEM_FN_NAME(X) X##_fastcall
 | 
						|
#define BOOST_MEM_FN_CC __fastcall
 | 
						|
 | 
						|
#include <boost/bind/mem_fn_cc.hpp>
 | 
						|
 | 
						|
#undef BOOST_MEM_FN_NAME
 | 
						|
#undef BOOST_MEM_FN_CC
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
// data member support
 | 
						|
 | 
						|
namespace _mfi
 | 
						|
{
 | 
						|
 | 
						|
template<class R, class T> class dm
 | 
						|
{
 | 
						|
public:
 | 
						|
 | 
						|
    typedef R const & result_type;
 | 
						|
    typedef T const * argument_type;
 | 
						|
 | 
						|
private:
 | 
						|
    
 | 
						|
    typedef R (T::*F);
 | 
						|
    F f_;
 | 
						|
 | 
						|
    template<class U> R const & call(U & u, T const *) const
 | 
						|
    {
 | 
						|
        return (u.*f_);
 | 
						|
    }
 | 
						|
 | 
						|
    template<class U> R const & call(U & u, void const *) const
 | 
						|
    {
 | 
						|
        return (get_pointer(u)->*f_);
 | 
						|
    }
 | 
						|
 | 
						|
public:
 | 
						|
    
 | 
						|
    explicit dm(F f): f_(f) {}
 | 
						|
 | 
						|
    R & operator()(T * p) const
 | 
						|
    {
 | 
						|
        return (p->*f_);
 | 
						|
    }
 | 
						|
 | 
						|
    R const & operator()(T const * p) const
 | 
						|
    {
 | 
						|
        return (p->*f_);
 | 
						|
    }
 | 
						|
 | 
						|
    template<class U> R const & operator()(U const & u) const
 | 
						|
    {
 | 
						|
        return call(u, &u);
 | 
						|
    }
 | 
						|
 | 
						|
#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300) && !BOOST_WORKAROUND(__MWERKS__, < 0x3200)
 | 
						|
 | 
						|
    R & operator()(T & t) const
 | 
						|
    {
 | 
						|
        return (t.*f_);
 | 
						|
    }
 | 
						|
 | 
						|
    R const & operator()(T const & t) const
 | 
						|
    {
 | 
						|
        return (t.*f_);
 | 
						|
    }
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
    bool operator==(dm const & rhs) const
 | 
						|
    {
 | 
						|
        return f_ == rhs.f_;
 | 
						|
    }
 | 
						|
 | 
						|
    bool operator!=(dm const & rhs) const
 | 
						|
    {
 | 
						|
        return f_ != rhs.f_;
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
} // namespace _mfi
 | 
						|
 | 
						|
template<class R, class T> _mfi::dm<R, T> mem_fn(R T::*f)
 | 
						|
{
 | 
						|
    return _mfi::dm<R, T>(f);
 | 
						|
}
 | 
						|
 | 
						|
} // namespace boost
 | 
						|
 | 
						|
#endif // #ifndef BOOST_BIND_MEM_FN_HPP_INCLUDED
 |