Initial Commit
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 1998-2003 Joel de Guzman
|
||||
Copyright (c) 2001 Daniel Nuffer
|
||||
Copyright (c) 2002 Hartmut Kaiser
|
||||
http://spirit.sourceforge.net/
|
||||
|
||||
Use, modification and distribution is 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)
|
||||
=============================================================================*/
|
||||
#if !defined(BOOST_SPIRIT_KLEENE_STAR_IPP)
|
||||
#define BOOST_SPIRIT_KLEENE_STAR_IPP
|
||||
|
||||
namespace boost { namespace spirit {
|
||||
|
||||
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// kleene_star class implementation
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename S>
|
||||
inline kleene_star<S>
|
||||
operator*(parser<S> const& a)
|
||||
{
|
||||
return kleene_star<S>(a.derived());
|
||||
}
|
||||
|
||||
BOOST_SPIRIT_CLASSIC_NAMESPACE_END
|
||||
|
||||
}} // namespace boost::spirit
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,29 @@
|
||||
#ifndef BOOST_THREAD_THREAD_ONLY_HPP
|
||||
#define BOOST_THREAD_THREAD_ONLY_HPP
|
||||
|
||||
// thread.hpp
|
||||
//
|
||||
// (C) Copyright 2013 Vicente J. Botet Escriba
|
||||
//
|
||||
// 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)
|
||||
|
||||
#include <boost/thread/detail/platform.hpp>
|
||||
|
||||
#if defined(BOOST_THREAD_PLATFORM_WIN32)
|
||||
#include <boost/thread/win32/thread_data.hpp>
|
||||
#elif defined(BOOST_THREAD_PLATFORM_PTHREAD)
|
||||
#include <boost/thread/pthread/thread_data.hpp>
|
||||
#else
|
||||
#error "Boost threads unavailable on this platform"
|
||||
#endif
|
||||
|
||||
#include <boost/thread/detail/thread.hpp>
|
||||
#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS
|
||||
#include <boost/thread/detail/thread_interruption.hpp>
|
||||
#endif
|
||||
#include <boost/thread/v2/thread.hpp>
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,35 @@
|
||||
|
||||
// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000-2005.
|
||||
// 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).
|
||||
//
|
||||
// See http://www.boost.org/libs/type_traits for most recent version including documentation.
|
||||
|
||||
#ifndef BOOST_TT_REMOVE_EXTENT_HPP_INCLUDED
|
||||
#define BOOST_TT_REMOVE_EXTENT_HPP_INCLUDED
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/detail/workaround.hpp>
|
||||
#include <cstddef> // size_t
|
||||
|
||||
namespace boost {
|
||||
|
||||
template <class T> struct remove_extent{ typedef T type; };
|
||||
|
||||
#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
|
||||
template <typename T, std::size_t N> struct remove_extent<T[N]> { typedef T type; };
|
||||
template <typename T, std::size_t N> struct remove_extent<T const[N]> { typedef T const type; };
|
||||
template <typename T, std::size_t N> struct remove_extent<T volatile [N]> { typedef T volatile type; };
|
||||
template <typename T, std::size_t N> struct remove_extent<T const volatile [N]> { typedef T const volatile type; };
|
||||
#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
|
||||
template <typename T> struct remove_extent<T[]> { typedef T type; };
|
||||
template <typename T> struct remove_extent<T const[]> { typedef T const type; };
|
||||
template <typename T> struct remove_extent<T volatile[]> { typedef T volatile type; };
|
||||
template <typename T> struct remove_extent<T const volatile[]> { typedef T const volatile type; };
|
||||
#endif
|
||||
#endif
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif // BOOST_TT_REMOVE_BOUNDS_HPP_INCLUDED
|
||||
@@ -0,0 +1,377 @@
|
||||
subroutine osd174(llr,apmask,ndeep,decoded,cw,nhardmin,dmin)
|
||||
!
|
||||
! An ordered-statistics decoder for the (174,87) code.
|
||||
!
|
||||
include "ldpc_174_87_params.f90"
|
||||
|
||||
integer*1 apmask(N),apmaskr(N)
|
||||
integer*1 gen(K,N)
|
||||
integer*1 genmrb(K,N),g2(N,K)
|
||||
integer*1 temp(K),m0(K),me(K),mi(K),misub(K),e2sub(N-K),e2(N-K),ui(N-K)
|
||||
integer*1 r2pat(N-K)
|
||||
integer indices(N),nxor(N)
|
||||
integer*1 cw(N),ce(N),c0(N),hdec(N)
|
||||
integer*1 decoded(K)
|
||||
integer indx(N)
|
||||
real llr(N),rx(N),absrx(N)
|
||||
logical first,reset
|
||||
data first/.true./
|
||||
save first,gen
|
||||
|
||||
if( first ) then ! fill the generator matrix
|
||||
gen=0
|
||||
do i=1,M
|
||||
do j=1,22
|
||||
read(g(i)(j:j),"(Z1)") istr
|
||||
do jj=1, 4
|
||||
irow=(j-1)*4+jj
|
||||
if( btest(istr,4-jj) ) gen(irow,i)=1
|
||||
enddo
|
||||
enddo
|
||||
enddo
|
||||
do irow=1,K
|
||||
gen(irow,M+irow)=1
|
||||
enddo
|
||||
first=.false.
|
||||
endif
|
||||
|
||||
! Re-order received vector to place systematic msg bits at the end.
|
||||
rx=llr(colorder+1)
|
||||
apmaskr=apmask(colorder+1)
|
||||
|
||||
! Hard decisions on the received word.
|
||||
hdec=0
|
||||
where(rx .ge. 0) hdec=1
|
||||
|
||||
! Use magnitude of received symbols as a measure of reliability.
|
||||
absrx=abs(rx)
|
||||
call indexx(absrx,N,indx)
|
||||
|
||||
! Re-order the columns of the generator matrix in order of decreasing reliability.
|
||||
do i=1,N
|
||||
genmrb(1:K,i)=gen(1:K,indx(N+1-i))
|
||||
indices(i)=indx(N+1-i)
|
||||
enddo
|
||||
|
||||
! Do gaussian elimination to create a generator matrix with the most reliable
|
||||
! received bits in positions 1:K in order of decreasing reliability (more or less).
|
||||
do id=1,K ! diagonal element indices
|
||||
do icol=id,K+20 ! The 20 is ad hoc - beware
|
||||
iflag=0
|
||||
if( genmrb(id,icol) .eq. 1 ) then
|
||||
iflag=1
|
||||
if( icol .ne. id ) then ! reorder column
|
||||
temp(1:K)=genmrb(1:K,id)
|
||||
genmrb(1:K,id)=genmrb(1:K,icol)
|
||||
genmrb(1:K,icol)=temp(1:K)
|
||||
itmp=indices(id)
|
||||
indices(id)=indices(icol)
|
||||
indices(icol)=itmp
|
||||
endif
|
||||
do ii=1,K
|
||||
if( ii .ne. id .and. genmrb(ii,id) .eq. 1 ) then
|
||||
genmrb(ii,1:N)=ieor(genmrb(ii,1:N),genmrb(id,1:N))
|
||||
endif
|
||||
enddo
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
enddo
|
||||
|
||||
g2=transpose(genmrb)
|
||||
|
||||
! The hard decisions for the K MRB bits define the order 0 message, m0.
|
||||
! Encode m0 using the modified generator matrix to find the "order 0" codeword.
|
||||
! Flip various combinations of bits in m0 and re-encode to generate a list of
|
||||
! codewords. Return the member of the list that has the smallest Euclidean
|
||||
! distance to the received word.
|
||||
|
||||
hdec=hdec(indices) ! hard decisions from received symbols
|
||||
m0=hdec(1:K) ! zero'th order message
|
||||
absrx=absrx(indices)
|
||||
rx=rx(indices)
|
||||
apmaskr=apmaskr(indices)
|
||||
|
||||
call mrbencode(m0,c0,g2,N,K)
|
||||
nxor=ieor(c0,hdec)
|
||||
nhardmin=sum(nxor)
|
||||
dmin=sum(nxor*absrx)
|
||||
|
||||
cw=c0
|
||||
ntotal=0
|
||||
nrejected=0
|
||||
|
||||
if(ndeep.eq.0) goto 998 ! norder=0
|
||||
if(ndeep.gt.5) ndeep=5
|
||||
if( ndeep.eq. 1) then
|
||||
nord=1
|
||||
npre1=0
|
||||
npre2=0
|
||||
nt=40
|
||||
ntheta=12
|
||||
elseif(ndeep.eq.2) then
|
||||
nord=1
|
||||
npre1=1
|
||||
npre2=0
|
||||
nt=40
|
||||
ntheta=12
|
||||
elseif(ndeep.eq.3) then
|
||||
nord=1
|
||||
npre1=1
|
||||
npre2=1
|
||||
nt=40
|
||||
ntheta=12
|
||||
ntau=14
|
||||
elseif(ndeep.eq.4) then
|
||||
nord=2
|
||||
npre1=1
|
||||
npre2=0
|
||||
nt=40
|
||||
ntheta=12
|
||||
ntau=19
|
||||
elseif(ndeep.eq.5) then
|
||||
nord=2
|
||||
npre1=1
|
||||
npre2=1
|
||||
nt=40
|
||||
ntheta=12
|
||||
ntau=19
|
||||
endif
|
||||
|
||||
do iorder=1,nord
|
||||
if( iorder.eq. 1 ) then
|
||||
misub(1:K-1)=0
|
||||
misub(K)=1
|
||||
iflag=K
|
||||
elseif( iorder.eq. 2 ) then
|
||||
misub(1:K-2)=0
|
||||
misub(K-1:K)=1
|
||||
iflag=K-1
|
||||
endif
|
||||
do while(iflag .ge.0)
|
||||
if(iorder.eq.nord .and. npre1.eq.0) then
|
||||
iend=iflag
|
||||
else
|
||||
iend=1
|
||||
endif
|
||||
do n1=iflag,iend,-1
|
||||
mi=misub
|
||||
mi(n1)=1
|
||||
if(any(iand(apmaskr(1:K),mi).eq.1)) cycle
|
||||
ntotal=ntotal+1
|
||||
me=ieor(m0,mi)
|
||||
if(n1.eq.iflag) then
|
||||
call mrbencode(me,ce,g2,N,K)
|
||||
e2sub=ieor(ce(K+1:N),hdec(K+1:N))
|
||||
e2=e2sub
|
||||
nd1Kpt=sum(e2sub(1:nt))+1
|
||||
d1=sum(ieor(me(1:K),hdec(1:K))*absrx(1:K))
|
||||
else
|
||||
e2=ieor(e2sub,g2(K+1:N,n1))
|
||||
nd1Kpt=sum(e2(1:nt))+2
|
||||
endif
|
||||
if(nd1Kpt .le. ntheta) then
|
||||
call mrbencode(me,ce,g2,N,K)
|
||||
nxor=ieor(ce,hdec)
|
||||
if(n1.eq.iflag) then
|
||||
dd=d1+sum(e2sub*absrx(K+1:N))
|
||||
else
|
||||
dd=d1+ieor(ce(n1),hdec(n1))*absrx(n1)+sum(e2*absrx(K+1:N))
|
||||
endif
|
||||
if( dd .lt. dmin ) then
|
||||
dmin=dd
|
||||
cw=ce
|
||||
nhardmin=sum(nxor)
|
||||
nd1Kptbest=nd1Kpt
|
||||
endif
|
||||
else
|
||||
nrejected=nrejected+1
|
||||
endif
|
||||
enddo
|
||||
! Get the next test error pattern, iflag will go negative
|
||||
! when the last pattern with weight iorder has been generated.
|
||||
call nextpat(misub,k,iorder,iflag)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
if(npre2.eq.1) then
|
||||
reset=.true.
|
||||
ntotal=0
|
||||
do i1=K,1,-1
|
||||
do i2=i1-1,1,-1
|
||||
ntotal=ntotal+1
|
||||
mi=ieor(g2(K+1:K+ntau,i1),g2(K+1:K+ntau,i2))
|
||||
call boxit(reset,mi(1:ntau),ntau,ntotal,i1,i2)
|
||||
enddo
|
||||
enddo
|
||||
|
||||
ncount2=0
|
||||
ntotal2=0
|
||||
reset=.true.
|
||||
! Now run through again and do the second pre-processing rule
|
||||
if(nord.eq.1) then
|
||||
misub(1:K-1)=0
|
||||
misub(K)=1
|
||||
iflag=K
|
||||
elseif(nord.eq.2) then
|
||||
misub(1:K-1)=0
|
||||
misub(K-1:K)=1
|
||||
iflag=K-1
|
||||
endif
|
||||
do while(iflag .ge.0)
|
||||
me=ieor(m0,misub)
|
||||
call mrbencode(me,ce,g2,N,K)
|
||||
e2sub=ieor(ce(K+1:N),hdec(K+1:N))
|
||||
do i2=0,ntau
|
||||
ntotal2=ntotal2+1
|
||||
ui=0
|
||||
if(i2.gt.0) ui(i2)=1
|
||||
r2pat=ieor(e2sub,ui)
|
||||
778 continue
|
||||
call fetchit(reset,r2pat(1:ntau),ntau,in1,in2)
|
||||
if(in1.gt.0.and.in2.gt.0) then
|
||||
ncount2=ncount2+1
|
||||
mi=misub
|
||||
mi(in1)=1
|
||||
mi(in2)=1
|
||||
if(sum(mi).lt.nord+npre1+npre2.or.any(iand(apmaskr(1:K),mi).eq.1)) cycle
|
||||
me=ieor(m0,mi)
|
||||
call mrbencode(me,ce,g2,N,K)
|
||||
nxor=ieor(ce,hdec)
|
||||
dd=sum(nxor*absrx)
|
||||
if( dd .lt. dmin ) then
|
||||
dmin=dd
|
||||
cw=ce
|
||||
nhardmin=sum(nxor)
|
||||
endif
|
||||
goto 778
|
||||
endif
|
||||
enddo
|
||||
call nextpat(misub,K,nord,iflag)
|
||||
enddo
|
||||
endif
|
||||
|
||||
998 continue
|
||||
! Re-order the codeword to place message bits at the end.
|
||||
cw(indices)=cw
|
||||
hdec(indices)=hdec
|
||||
decoded=cw(K+1:N)
|
||||
cw(colorder+1)=cw ! put the codeword back into received-word order
|
||||
return
|
||||
end subroutine osd174
|
||||
|
||||
subroutine mrbencode(me,codeword,g2,N,K)
|
||||
integer*1 me(K),codeword(N),g2(N,K)
|
||||
! fast encoding for low-weight test patterns
|
||||
codeword=0
|
||||
do i=1,K
|
||||
if( me(i) .eq. 1 ) then
|
||||
codeword=ieor(codeword,g2(1:N,i))
|
||||
endif
|
||||
enddo
|
||||
return
|
||||
end subroutine mrbencode
|
||||
|
||||
subroutine nextpat(mi,k,iorder,iflag)
|
||||
integer*1 mi(k),ms(k)
|
||||
! generate the next test error pattern
|
||||
ind=-1
|
||||
do i=1,k-1
|
||||
if( mi(i).eq.0 .and. mi(i+1).eq.1) ind=i
|
||||
enddo
|
||||
if( ind .lt. 0 ) then ! no more patterns of this order
|
||||
iflag=ind
|
||||
return
|
||||
endif
|
||||
ms=0
|
||||
ms(1:ind-1)=mi(1:ind-1)
|
||||
ms(ind)=1
|
||||
ms(ind+1)=0
|
||||
if( ind+1 .lt. k ) then
|
||||
nz=iorder-sum(ms)
|
||||
ms(k-nz+1:k)=1
|
||||
endif
|
||||
mi=ms
|
||||
do i=1,k ! iflag will point to the lowest-index 1 in mi
|
||||
if(mi(i).eq.1) then
|
||||
iflag=i
|
||||
exit
|
||||
endif
|
||||
enddo
|
||||
return
|
||||
end subroutine nextpat
|
||||
|
||||
subroutine boxit(reset,e2,ntau,npindex,i1,i2)
|
||||
integer*1 e2(1:ntau)
|
||||
integer indexes(4000,2),fp(0:525000),np(4000)
|
||||
logical reset
|
||||
common/boxes/indexes,fp,np
|
||||
|
||||
if(reset) then
|
||||
patterns=-1
|
||||
fp=-1
|
||||
np=-1
|
||||
sc=-1
|
||||
indexes=-1
|
||||
reset=.false.
|
||||
endif
|
||||
|
||||
indexes(npindex,1)=i1
|
||||
indexes(npindex,2)=i2
|
||||
ipat=0
|
||||
do i=1,ntau
|
||||
if(e2(i).eq.1) then
|
||||
ipat=ipat+ishft(1,ntau-i)
|
||||
endif
|
||||
enddo
|
||||
|
||||
ip=fp(ipat) ! see what's currently stored in fp(ipat)
|
||||
if(ip.eq.-1) then
|
||||
fp(ipat)=npindex
|
||||
else
|
||||
do while (np(ip).ne.-1)
|
||||
ip=np(ip)
|
||||
enddo
|
||||
np(ip)=npindex
|
||||
endif
|
||||
return
|
||||
end subroutine boxit
|
||||
|
||||
subroutine fetchit(reset,e2,ntau,i1,i2)
|
||||
integer indexes(4000,2),fp(0:525000),np(4000)
|
||||
integer lastpat
|
||||
integer*1 e2(ntau)
|
||||
logical reset
|
||||
common/boxes/indexes,fp,np
|
||||
save lastpat,inext
|
||||
|
||||
if(reset) then
|
||||
lastpat=-1
|
||||
reset=.false.
|
||||
endif
|
||||
|
||||
ipat=0
|
||||
do i=1,ntau
|
||||
if(e2(i).eq.1) then
|
||||
ipat=ipat+ishft(1,ntau-i)
|
||||
endif
|
||||
enddo
|
||||
index=fp(ipat)
|
||||
|
||||
if(lastpat.ne.ipat .and. index.gt.0) then ! return first set of indices
|
||||
i1=indexes(index,1)
|
||||
i2=indexes(index,2)
|
||||
inext=np(index)
|
||||
elseif(lastpat.eq.ipat .and. inext.gt.0) then
|
||||
i1=indexes(inext,1)
|
||||
i2=indexes(inext,2)
|
||||
inext=np(inext)
|
||||
else
|
||||
i1=-1
|
||||
i2=-1
|
||||
inext=-1
|
||||
endif
|
||||
lastpat=ipat
|
||||
return
|
||||
end subroutine fetchit
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2011 Eric Niebler
|
||||
|
||||
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)
|
||||
==============================================================================*/
|
||||
#if !defined(BOOST_FUSION_FOLD_S_HPP_INCLUDED)
|
||||
#define BOOST_FUSION_FOLD_S_HPP_INCLUDED
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/algorithm/iteration/fold_fwd.hpp>
|
||||
#include <boost/fusion/support/segmented_fold_until.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
namespace boost { namespace fusion { namespace detail
|
||||
{
|
||||
template <typename Fun>
|
||||
struct segmented_fold_fun
|
||||
{
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
explicit segmented_fold_fun(Fun const& f)
|
||||
: fun(f)
|
||||
{}
|
||||
|
||||
Fun const& fun;
|
||||
|
||||
template <typename Sequence, typename State, typename Context>
|
||||
struct apply
|
||||
{
|
||||
typedef typename result_of::fold<Sequence, State, Fun>::type type;
|
||||
typedef mpl::true_ continue_type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence& seq, State const& state, Context const&, segmented_fold_fun const& fun)
|
||||
{
|
||||
return fusion::fold(seq, state, fun.fun);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// The default implementation of this lives in detail/fold.hpp
|
||||
template <typename Sequence, typename State, typename Fun, bool IsSequence, bool IsSegmented>
|
||||
struct result_of_fold;
|
||||
|
||||
template <typename Sequence, typename State, typename Fun>
|
||||
struct result_of_fold<Sequence, State, Fun, true, true>
|
||||
{
|
||||
typedef
|
||||
typename result_of::segmented_fold_until<
|
||||
Sequence,
|
||||
State,
|
||||
segmented_fold_fun<Fun>
|
||||
>::type
|
||||
type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type call(Sequence& seq, State& state, Fun& fun)
|
||||
{
|
||||
return fusion::segmented_fold_until(seq, state, segmented_fold_fun<Fun>(fun));
|
||||
}
|
||||
};
|
||||
}}}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,75 @@
|
||||
// boost/chrono/thread_clock.hpp -----------------------------------------------------------//
|
||||
|
||||
// Copyright 2009-2011 Vicente J. Botet Escriba
|
||||
|
||||
// Distributed under the Boost Software License, Version 1.0.
|
||||
// See http://www.boost.org/LICENSE_1_0.txt
|
||||
|
||||
// See http://www.boost.org/libs/system for documentation.
|
||||
|
||||
#include <boost/chrono/config.hpp>
|
||||
|
||||
#ifndef BOOST_CHRONO_THREAD_CLOCK_HPP
|
||||
#define BOOST_CHRONO_THREAD_CLOCK_HPP
|
||||
|
||||
#if defined(BOOST_CHRONO_HAS_THREAD_CLOCK)
|
||||
|
||||
#include <boost/chrono/config.hpp>
|
||||
#include <boost/chrono/duration.hpp>
|
||||
#include <boost/chrono/time_point.hpp>
|
||||
#include <boost/chrono/detail/system.hpp>
|
||||
#include <boost/chrono/clock_string.hpp>
|
||||
|
||||
#ifndef BOOST_CHRONO_HEADER_ONLY
|
||||
#include <boost/config/abi_prefix.hpp> // must be the last #include
|
||||
#endif
|
||||
|
||||
namespace boost { namespace chrono {
|
||||
|
||||
class BOOST_CHRONO_DECL thread_clock {
|
||||
public:
|
||||
typedef nanoseconds duration;
|
||||
typedef duration::rep rep;
|
||||
typedef duration::period period;
|
||||
typedef chrono::time_point<thread_clock> time_point;
|
||||
BOOST_STATIC_CONSTEXPR bool is_steady = BOOST_CHRONO_THREAD_CLOCK_IS_STEADY;
|
||||
|
||||
static BOOST_CHRONO_INLINE time_point now( ) BOOST_NOEXCEPT;
|
||||
#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
|
||||
static BOOST_CHRONO_INLINE time_point now( system::error_code & ec );
|
||||
#endif
|
||||
};
|
||||
|
||||
template <class CharT>
|
||||
struct clock_string<thread_clock, CharT>
|
||||
{
|
||||
static std::basic_string<CharT> name()
|
||||
{
|
||||
static const CharT u[] =
|
||||
{ 't', 'h', 'r', 'e', 'a', 'd', '_',
|
||||
'c', 'l','o', 'c', 'k'};
|
||||
static const std::basic_string<CharT> str(u, u + sizeof(u)/sizeof(u[0]));
|
||||
return str;
|
||||
}
|
||||
static std::basic_string<CharT> since()
|
||||
{
|
||||
const CharT u[] =
|
||||
{ ' ', 's', 'i', 'n', 'c', 'e', ' ', 't', 'h', 'r', 'e', 'a', 'd', ' ', 's', 't', 'a', 'r', 't', '-', 'u', 'p'};
|
||||
const std::basic_string<CharT> str(u, u + sizeof(u)/sizeof(u[0]));
|
||||
return str;
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace chrono
|
||||
} // namespace boost
|
||||
|
||||
|
||||
#ifndef BOOST_CHRONO_HEADER_ONLY
|
||||
#include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
|
||||
#else
|
||||
#include <boost/chrono/detail/inlined/thread_clock.hpp>
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif // BOOST_CHRONO_THREAD_CLOCK_HPP
|
||||
@@ -0,0 +1,50 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
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)
|
||||
==============================================================================*/
|
||||
#if !defined(FUSION_DEREF_IMPL_07202005_0851)
|
||||
#define FUSION_DEREF_IMPL_07202005_0851
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/prior.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct reverse_view_iterator_tag;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template <typename Tag>
|
||||
struct deref_impl;
|
||||
|
||||
template <>
|
||||
struct deref_impl<reverse_view_iterator_tag>
|
||||
{
|
||||
template <typename Iterator>
|
||||
struct apply
|
||||
{
|
||||
typedef typename
|
||||
result_of::deref<
|
||||
typename result_of::prior<
|
||||
typename Iterator::first_type
|
||||
>::type
|
||||
>::type
|
||||
type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Iterator const& i)
|
||||
{
|
||||
return *fusion::prior(i.first);
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,199 @@
|
||||
// Boost string_algo library compare.hpp header file -------------------------//
|
||||
|
||||
// Copyright Pavol Droba 2002-2006.
|
||||
//
|
||||
// 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/ for updates, documentation, and revision history.
|
||||
|
||||
#ifndef BOOST_STRING_COMPARE_HPP
|
||||
#define BOOST_STRING_COMPARE_HPP
|
||||
|
||||
#include <boost/algorithm/string/config.hpp>
|
||||
#include <locale>
|
||||
|
||||
/*! \file
|
||||
Defines element comparison predicates. Many algorithms in this library can
|
||||
take an additional argument with a predicate used to compare elements.
|
||||
This makes it possible, for instance, to have case insensitive versions
|
||||
of the algorithms.
|
||||
*/
|
||||
|
||||
namespace boost {
|
||||
namespace algorithm {
|
||||
|
||||
// is_equal functor -----------------------------------------------//
|
||||
|
||||
//! is_equal functor
|
||||
/*!
|
||||
Standard STL equal_to only handle comparison between arguments
|
||||
of the same type. This is a less restrictive version which wraps operator ==.
|
||||
*/
|
||||
struct is_equal
|
||||
{
|
||||
//! Function operator
|
||||
/*!
|
||||
Compare two operands for equality
|
||||
*/
|
||||
template< typename T1, typename T2 >
|
||||
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||
{
|
||||
return Arg1==Arg2;
|
||||
}
|
||||
};
|
||||
|
||||
//! case insensitive version of is_equal
|
||||
/*!
|
||||
Case insensitive comparison predicate. Comparison is done using
|
||||
specified locales.
|
||||
*/
|
||||
struct is_iequal
|
||||
{
|
||||
//! Constructor
|
||||
/*!
|
||||
\param Loc locales used for comparison
|
||||
*/
|
||||
is_iequal( const std::locale& Loc=std::locale() ) :
|
||||
m_Loc( Loc ) {}
|
||||
|
||||
//! Function operator
|
||||
/*!
|
||||
Compare two operands. Case is ignored.
|
||||
*/
|
||||
template< typename T1, typename T2 >
|
||||
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||
{
|
||||
#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
|
||||
return std::toupper(Arg1)==std::toupper(Arg2);
|
||||
#else
|
||||
return std::toupper<T1>(Arg1,m_Loc)==std::toupper<T2>(Arg2,m_Loc);
|
||||
#endif
|
||||
}
|
||||
|
||||
private:
|
||||
std::locale m_Loc;
|
||||
};
|
||||
|
||||
// is_less functor -----------------------------------------------//
|
||||
|
||||
//! is_less functor
|
||||
/*!
|
||||
Convenient version of standard std::less. Operation is templated, therefore it is
|
||||
not required to specify the exact types upon the construction
|
||||
*/
|
||||
struct is_less
|
||||
{
|
||||
//! Functor operation
|
||||
/*!
|
||||
Compare two operands using > operator
|
||||
*/
|
||||
template< typename T1, typename T2 >
|
||||
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||
{
|
||||
return Arg1<Arg2;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//! case insensitive version of is_less
|
||||
/*!
|
||||
Case insensitive comparison predicate. Comparison is done using
|
||||
specified locales.
|
||||
*/
|
||||
struct is_iless
|
||||
{
|
||||
//! Constructor
|
||||
/*!
|
||||
\param Loc locales used for comparison
|
||||
*/
|
||||
is_iless( const std::locale& Loc=std::locale() ) :
|
||||
m_Loc( Loc ) {}
|
||||
|
||||
//! Function operator
|
||||
/*!
|
||||
Compare two operands. Case is ignored.
|
||||
*/
|
||||
template< typename T1, typename T2 >
|
||||
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||
{
|
||||
#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
|
||||
return std::toupper(Arg1)<std::toupper(Arg2);
|
||||
#else
|
||||
return std::toupper<T1>(Arg1,m_Loc)<std::toupper<T2>(Arg2,m_Loc);
|
||||
#endif
|
||||
}
|
||||
|
||||
private:
|
||||
std::locale m_Loc;
|
||||
};
|
||||
|
||||
// is_not_greater functor -----------------------------------------------//
|
||||
|
||||
//! is_not_greater functor
|
||||
/*!
|
||||
Convenient version of standard std::not_greater_to. Operation is templated, therefore it is
|
||||
not required to specify the exact types upon the construction
|
||||
*/
|
||||
struct is_not_greater
|
||||
{
|
||||
//! Functor operation
|
||||
/*!
|
||||
Compare two operands using > operator
|
||||
*/
|
||||
template< typename T1, typename T2 >
|
||||
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||
{
|
||||
return Arg1<=Arg2;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//! case insensitive version of is_not_greater
|
||||
/*!
|
||||
Case insensitive comparison predicate. Comparison is done using
|
||||
specified locales.
|
||||
*/
|
||||
struct is_not_igreater
|
||||
{
|
||||
//! Constructor
|
||||
/*!
|
||||
\param Loc locales used for comparison
|
||||
*/
|
||||
is_not_igreater( const std::locale& Loc=std::locale() ) :
|
||||
m_Loc( Loc ) {}
|
||||
|
||||
//! Function operator
|
||||
/*!
|
||||
Compare two operands. Case is ignored.
|
||||
*/
|
||||
template< typename T1, typename T2 >
|
||||
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||
{
|
||||
#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
|
||||
return std::toupper(Arg1)<=std::toupper(Arg2);
|
||||
#else
|
||||
return std::toupper<T1>(Arg1,m_Loc)<=std::toupper<T2>(Arg2,m_Loc);
|
||||
#endif
|
||||
}
|
||||
|
||||
private:
|
||||
std::locale m_Loc;
|
||||
};
|
||||
|
||||
|
||||
} // namespace algorithm
|
||||
|
||||
// pull names to the boost namespace
|
||||
using algorithm::is_equal;
|
||||
using algorithm::is_iequal;
|
||||
using algorithm::is_less;
|
||||
using algorithm::is_iless;
|
||||
using algorithm::is_not_greater;
|
||||
using algorithm::is_not_igreater;
|
||||
|
||||
} // namespace boost
|
||||
|
||||
|
||||
#endif // BOOST_STRING_COMPARE_HPP
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
Copyright Rene Rivera 2008-2015
|
||||
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_PREDEF_OS_QNXNTO_H
|
||||
#define BOOST_PREDEF_OS_QNXNTO_H
|
||||
|
||||
#include <boost/predef/version_number.h>
|
||||
#include <boost/predef/make.h>
|
||||
|
||||
/*`
|
||||
[heading `BOOST_OS_QNX`]
|
||||
|
||||
[@http://en.wikipedia.org/wiki/QNX QNX] operating system.
|
||||
Version number available as major, and minor if possible. And
|
||||
version 4 is specifically detected.
|
||||
|
||||
[table
|
||||
[[__predef_symbol__] [__predef_version__]]
|
||||
|
||||
[[`__QNX__`] [__predef_detection__]]
|
||||
[[`__QNXNTO__`] [__predef_detection__]]
|
||||
|
||||
[[`_NTO_VERSION`] [V.R.0]]
|
||||
[[`__QNX__`] [4.0.0]]
|
||||
]
|
||||
*/
|
||||
|
||||
#define BOOST_OS_QNX BOOST_VERSION_NUMBER_NOT_AVAILABLE
|
||||
|
||||
#if !defined(BOOST_PREDEF_DETAIL_OS_DETECTED) && ( \
|
||||
defined(__QNX__) || defined(__QNXNTO__) \
|
||||
)
|
||||
# undef BOOST_OS_QNX
|
||||
# if !defined(BOOST_OS_QNX) && defined(_NTO_VERSION)
|
||||
# define BOOST_OS_QNX BOOST_PREDEF_MAKE_10_VVRR(_NTO_VERSION)
|
||||
# endif
|
||||
# if !defined(BOOST_OS_QNX) && defined(__QNX__)
|
||||
# define BOOST_OS_QNX BOOST_VERSION_NUMBER(4,0,0)
|
||||
# endif
|
||||
# if !defined(BOOST_OS_QNX)
|
||||
# define BOOST_OS_QNX BOOST_VERSION_NUMBER_AVAILABLE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if BOOST_OS_QNX
|
||||
# define BOOST_OS_QNX_AVAILABLE
|
||||
# include <boost/predef/detail/os_detected.h>
|
||||
#endif
|
||||
|
||||
#define BOOST_OS_QNX_NAME "QNX"
|
||||
|
||||
#endif
|
||||
|
||||
#include <boost/predef/detail/test.h>
|
||||
BOOST_PREDEF_DECLARE_TEST(BOOST_OS_QNX,BOOST_OS_QNX_NAME)
|
||||
@@ -0,0 +1,29 @@
|
||||
// Copyright (C) 2010 Peder Holt
|
||||
// Use, modification and distribution is subject to the Boost Software
|
||||
// License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
#ifndef BOOST_TYPEOF_UNSUPPORTED_HPP_INCLUDED
|
||||
#define BOOST_TYPEOF_UNSUPPORTED_HPP_INCLUDED
|
||||
|
||||
namespace boost { namespace type_of {
|
||||
struct typeof_emulation_is_unsupported_on_this_compiler {};
|
||||
}}
|
||||
|
||||
#define BOOST_TYPEOF(expr) boost::type_of::typeof_emulation_is_unsupported_on_this_compiler
|
||||
#define BOOST_TYPEOF_TPL BOOST_TYPEOF
|
||||
|
||||
#define BOOST_TYPEOF_NESTED_TYPEDEF_TPL(name,expr) \
|
||||
struct name {\
|
||||
typedef BOOST_TYPEOF_TPL(expr) type;\
|
||||
};
|
||||
|
||||
#define BOOST_TYPEOF_NESTED_TYPEDEF(name,expr) \
|
||||
struct name {\
|
||||
typedef BOOST_TYPEOF(expr) type;\
|
||||
};
|
||||
|
||||
|
||||
#define BOOST_TYPEOF_REGISTER_TYPE(x)
|
||||
#define BOOST_TYPEOF_REGISTER_TEMPLATE(x, params)
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,812 @@
|
||||
# /* **************************************************************************
|
||||
# * *
|
||||
# * (C) Copyright Paul Mensonides 2002.
|
||||
# * 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 for most recent version. */
|
||||
#
|
||||
# if !defined(BOOST_PP_LOCAL_LIMITS)
|
||||
# error BOOST_PP_ERROR: local iteration boundaries are not defined
|
||||
# elif !defined(BOOST_PP_LOCAL_MACRO)
|
||||
# error BOOST_PP_ERROR: local iteration target macro is not defined
|
||||
# else
|
||||
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
|
||||
# define BOOST_PP_LOCAL_S BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_LOCAL_LIMITS)
|
||||
# define BOOST_PP_LOCAL_F BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_LOCAL_LIMITS)
|
||||
# else
|
||||
# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 0, BOOST_PP_LOCAL_LIMITS)
|
||||
# include <boost/preprocessor/iteration/detail/start.hpp>
|
||||
# define BOOST_PP_VALUE BOOST_PP_TUPLE_ELEM(2, 1, BOOST_PP_LOCAL_LIMITS)
|
||||
# include <boost/preprocessor/iteration/detail/finish.hpp>
|
||||
# define BOOST_PP_LOCAL_S BOOST_PP_LOCAL_SE()
|
||||
# define BOOST_PP_LOCAL_F BOOST_PP_LOCAL_FE()
|
||||
# endif
|
||||
# endif
|
||||
#
|
||||
# if (BOOST_PP_LOCAL_S) > (BOOST_PP_LOCAL_F)
|
||||
# include <boost/preprocessor/iteration/detail/rlocal.hpp>
|
||||
# else
|
||||
# if BOOST_PP_LOCAL_C(0)
|
||||
BOOST_PP_LOCAL_MACRO(0)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(1)
|
||||
BOOST_PP_LOCAL_MACRO(1)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(2)
|
||||
BOOST_PP_LOCAL_MACRO(2)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(3)
|
||||
BOOST_PP_LOCAL_MACRO(3)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(4)
|
||||
BOOST_PP_LOCAL_MACRO(4)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(5)
|
||||
BOOST_PP_LOCAL_MACRO(5)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(6)
|
||||
BOOST_PP_LOCAL_MACRO(6)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(7)
|
||||
BOOST_PP_LOCAL_MACRO(7)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(8)
|
||||
BOOST_PP_LOCAL_MACRO(8)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(9)
|
||||
BOOST_PP_LOCAL_MACRO(9)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(10)
|
||||
BOOST_PP_LOCAL_MACRO(10)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(11)
|
||||
BOOST_PP_LOCAL_MACRO(11)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(12)
|
||||
BOOST_PP_LOCAL_MACRO(12)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(13)
|
||||
BOOST_PP_LOCAL_MACRO(13)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(14)
|
||||
BOOST_PP_LOCAL_MACRO(14)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(15)
|
||||
BOOST_PP_LOCAL_MACRO(15)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(16)
|
||||
BOOST_PP_LOCAL_MACRO(16)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(17)
|
||||
BOOST_PP_LOCAL_MACRO(17)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(18)
|
||||
BOOST_PP_LOCAL_MACRO(18)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(19)
|
||||
BOOST_PP_LOCAL_MACRO(19)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(20)
|
||||
BOOST_PP_LOCAL_MACRO(20)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(21)
|
||||
BOOST_PP_LOCAL_MACRO(21)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(22)
|
||||
BOOST_PP_LOCAL_MACRO(22)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(23)
|
||||
BOOST_PP_LOCAL_MACRO(23)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(24)
|
||||
BOOST_PP_LOCAL_MACRO(24)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(25)
|
||||
BOOST_PP_LOCAL_MACRO(25)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(26)
|
||||
BOOST_PP_LOCAL_MACRO(26)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(27)
|
||||
BOOST_PP_LOCAL_MACRO(27)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(28)
|
||||
BOOST_PP_LOCAL_MACRO(28)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(29)
|
||||
BOOST_PP_LOCAL_MACRO(29)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(30)
|
||||
BOOST_PP_LOCAL_MACRO(30)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(31)
|
||||
BOOST_PP_LOCAL_MACRO(31)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(32)
|
||||
BOOST_PP_LOCAL_MACRO(32)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(33)
|
||||
BOOST_PP_LOCAL_MACRO(33)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(34)
|
||||
BOOST_PP_LOCAL_MACRO(34)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(35)
|
||||
BOOST_PP_LOCAL_MACRO(35)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(36)
|
||||
BOOST_PP_LOCAL_MACRO(36)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(37)
|
||||
BOOST_PP_LOCAL_MACRO(37)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(38)
|
||||
BOOST_PP_LOCAL_MACRO(38)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(39)
|
||||
BOOST_PP_LOCAL_MACRO(39)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(40)
|
||||
BOOST_PP_LOCAL_MACRO(40)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(41)
|
||||
BOOST_PP_LOCAL_MACRO(41)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(42)
|
||||
BOOST_PP_LOCAL_MACRO(42)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(43)
|
||||
BOOST_PP_LOCAL_MACRO(43)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(44)
|
||||
BOOST_PP_LOCAL_MACRO(44)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(45)
|
||||
BOOST_PP_LOCAL_MACRO(45)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(46)
|
||||
BOOST_PP_LOCAL_MACRO(46)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(47)
|
||||
BOOST_PP_LOCAL_MACRO(47)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(48)
|
||||
BOOST_PP_LOCAL_MACRO(48)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(49)
|
||||
BOOST_PP_LOCAL_MACRO(49)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(50)
|
||||
BOOST_PP_LOCAL_MACRO(50)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(51)
|
||||
BOOST_PP_LOCAL_MACRO(51)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(52)
|
||||
BOOST_PP_LOCAL_MACRO(52)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(53)
|
||||
BOOST_PP_LOCAL_MACRO(53)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(54)
|
||||
BOOST_PP_LOCAL_MACRO(54)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(55)
|
||||
BOOST_PP_LOCAL_MACRO(55)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(56)
|
||||
BOOST_PP_LOCAL_MACRO(56)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(57)
|
||||
BOOST_PP_LOCAL_MACRO(57)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(58)
|
||||
BOOST_PP_LOCAL_MACRO(58)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(59)
|
||||
BOOST_PP_LOCAL_MACRO(59)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(60)
|
||||
BOOST_PP_LOCAL_MACRO(60)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(61)
|
||||
BOOST_PP_LOCAL_MACRO(61)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(62)
|
||||
BOOST_PP_LOCAL_MACRO(62)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(63)
|
||||
BOOST_PP_LOCAL_MACRO(63)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(64)
|
||||
BOOST_PP_LOCAL_MACRO(64)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(65)
|
||||
BOOST_PP_LOCAL_MACRO(65)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(66)
|
||||
BOOST_PP_LOCAL_MACRO(66)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(67)
|
||||
BOOST_PP_LOCAL_MACRO(67)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(68)
|
||||
BOOST_PP_LOCAL_MACRO(68)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(69)
|
||||
BOOST_PP_LOCAL_MACRO(69)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(70)
|
||||
BOOST_PP_LOCAL_MACRO(70)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(71)
|
||||
BOOST_PP_LOCAL_MACRO(71)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(72)
|
||||
BOOST_PP_LOCAL_MACRO(72)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(73)
|
||||
BOOST_PP_LOCAL_MACRO(73)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(74)
|
||||
BOOST_PP_LOCAL_MACRO(74)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(75)
|
||||
BOOST_PP_LOCAL_MACRO(75)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(76)
|
||||
BOOST_PP_LOCAL_MACRO(76)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(77)
|
||||
BOOST_PP_LOCAL_MACRO(77)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(78)
|
||||
BOOST_PP_LOCAL_MACRO(78)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(79)
|
||||
BOOST_PP_LOCAL_MACRO(79)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(80)
|
||||
BOOST_PP_LOCAL_MACRO(80)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(81)
|
||||
BOOST_PP_LOCAL_MACRO(81)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(82)
|
||||
BOOST_PP_LOCAL_MACRO(82)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(83)
|
||||
BOOST_PP_LOCAL_MACRO(83)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(84)
|
||||
BOOST_PP_LOCAL_MACRO(84)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(85)
|
||||
BOOST_PP_LOCAL_MACRO(85)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(86)
|
||||
BOOST_PP_LOCAL_MACRO(86)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(87)
|
||||
BOOST_PP_LOCAL_MACRO(87)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(88)
|
||||
BOOST_PP_LOCAL_MACRO(88)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(89)
|
||||
BOOST_PP_LOCAL_MACRO(89)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(90)
|
||||
BOOST_PP_LOCAL_MACRO(90)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(91)
|
||||
BOOST_PP_LOCAL_MACRO(91)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(92)
|
||||
BOOST_PP_LOCAL_MACRO(92)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(93)
|
||||
BOOST_PP_LOCAL_MACRO(93)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(94)
|
||||
BOOST_PP_LOCAL_MACRO(94)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(95)
|
||||
BOOST_PP_LOCAL_MACRO(95)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(96)
|
||||
BOOST_PP_LOCAL_MACRO(96)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(97)
|
||||
BOOST_PP_LOCAL_MACRO(97)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(98)
|
||||
BOOST_PP_LOCAL_MACRO(98)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(99)
|
||||
BOOST_PP_LOCAL_MACRO(99)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(100)
|
||||
BOOST_PP_LOCAL_MACRO(100)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(101)
|
||||
BOOST_PP_LOCAL_MACRO(101)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(102)
|
||||
BOOST_PP_LOCAL_MACRO(102)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(103)
|
||||
BOOST_PP_LOCAL_MACRO(103)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(104)
|
||||
BOOST_PP_LOCAL_MACRO(104)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(105)
|
||||
BOOST_PP_LOCAL_MACRO(105)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(106)
|
||||
BOOST_PP_LOCAL_MACRO(106)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(107)
|
||||
BOOST_PP_LOCAL_MACRO(107)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(108)
|
||||
BOOST_PP_LOCAL_MACRO(108)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(109)
|
||||
BOOST_PP_LOCAL_MACRO(109)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(110)
|
||||
BOOST_PP_LOCAL_MACRO(110)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(111)
|
||||
BOOST_PP_LOCAL_MACRO(111)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(112)
|
||||
BOOST_PP_LOCAL_MACRO(112)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(113)
|
||||
BOOST_PP_LOCAL_MACRO(113)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(114)
|
||||
BOOST_PP_LOCAL_MACRO(114)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(115)
|
||||
BOOST_PP_LOCAL_MACRO(115)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(116)
|
||||
BOOST_PP_LOCAL_MACRO(116)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(117)
|
||||
BOOST_PP_LOCAL_MACRO(117)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(118)
|
||||
BOOST_PP_LOCAL_MACRO(118)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(119)
|
||||
BOOST_PP_LOCAL_MACRO(119)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(120)
|
||||
BOOST_PP_LOCAL_MACRO(120)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(121)
|
||||
BOOST_PP_LOCAL_MACRO(121)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(122)
|
||||
BOOST_PP_LOCAL_MACRO(122)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(123)
|
||||
BOOST_PP_LOCAL_MACRO(123)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(124)
|
||||
BOOST_PP_LOCAL_MACRO(124)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(125)
|
||||
BOOST_PP_LOCAL_MACRO(125)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(126)
|
||||
BOOST_PP_LOCAL_MACRO(126)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(127)
|
||||
BOOST_PP_LOCAL_MACRO(127)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(128)
|
||||
BOOST_PP_LOCAL_MACRO(128)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(129)
|
||||
BOOST_PP_LOCAL_MACRO(129)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(130)
|
||||
BOOST_PP_LOCAL_MACRO(130)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(131)
|
||||
BOOST_PP_LOCAL_MACRO(131)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(132)
|
||||
BOOST_PP_LOCAL_MACRO(132)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(133)
|
||||
BOOST_PP_LOCAL_MACRO(133)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(134)
|
||||
BOOST_PP_LOCAL_MACRO(134)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(135)
|
||||
BOOST_PP_LOCAL_MACRO(135)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(136)
|
||||
BOOST_PP_LOCAL_MACRO(136)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(137)
|
||||
BOOST_PP_LOCAL_MACRO(137)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(138)
|
||||
BOOST_PP_LOCAL_MACRO(138)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(139)
|
||||
BOOST_PP_LOCAL_MACRO(139)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(140)
|
||||
BOOST_PP_LOCAL_MACRO(140)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(141)
|
||||
BOOST_PP_LOCAL_MACRO(141)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(142)
|
||||
BOOST_PP_LOCAL_MACRO(142)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(143)
|
||||
BOOST_PP_LOCAL_MACRO(143)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(144)
|
||||
BOOST_PP_LOCAL_MACRO(144)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(145)
|
||||
BOOST_PP_LOCAL_MACRO(145)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(146)
|
||||
BOOST_PP_LOCAL_MACRO(146)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(147)
|
||||
BOOST_PP_LOCAL_MACRO(147)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(148)
|
||||
BOOST_PP_LOCAL_MACRO(148)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(149)
|
||||
BOOST_PP_LOCAL_MACRO(149)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(150)
|
||||
BOOST_PP_LOCAL_MACRO(150)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(151)
|
||||
BOOST_PP_LOCAL_MACRO(151)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(152)
|
||||
BOOST_PP_LOCAL_MACRO(152)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(153)
|
||||
BOOST_PP_LOCAL_MACRO(153)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(154)
|
||||
BOOST_PP_LOCAL_MACRO(154)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(155)
|
||||
BOOST_PP_LOCAL_MACRO(155)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(156)
|
||||
BOOST_PP_LOCAL_MACRO(156)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(157)
|
||||
BOOST_PP_LOCAL_MACRO(157)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(158)
|
||||
BOOST_PP_LOCAL_MACRO(158)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(159)
|
||||
BOOST_PP_LOCAL_MACRO(159)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(160)
|
||||
BOOST_PP_LOCAL_MACRO(160)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(161)
|
||||
BOOST_PP_LOCAL_MACRO(161)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(162)
|
||||
BOOST_PP_LOCAL_MACRO(162)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(163)
|
||||
BOOST_PP_LOCAL_MACRO(163)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(164)
|
||||
BOOST_PP_LOCAL_MACRO(164)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(165)
|
||||
BOOST_PP_LOCAL_MACRO(165)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(166)
|
||||
BOOST_PP_LOCAL_MACRO(166)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(167)
|
||||
BOOST_PP_LOCAL_MACRO(167)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(168)
|
||||
BOOST_PP_LOCAL_MACRO(168)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(169)
|
||||
BOOST_PP_LOCAL_MACRO(169)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(170)
|
||||
BOOST_PP_LOCAL_MACRO(170)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(171)
|
||||
BOOST_PP_LOCAL_MACRO(171)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(172)
|
||||
BOOST_PP_LOCAL_MACRO(172)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(173)
|
||||
BOOST_PP_LOCAL_MACRO(173)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(174)
|
||||
BOOST_PP_LOCAL_MACRO(174)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(175)
|
||||
BOOST_PP_LOCAL_MACRO(175)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(176)
|
||||
BOOST_PP_LOCAL_MACRO(176)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(177)
|
||||
BOOST_PP_LOCAL_MACRO(177)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(178)
|
||||
BOOST_PP_LOCAL_MACRO(178)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(179)
|
||||
BOOST_PP_LOCAL_MACRO(179)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(180)
|
||||
BOOST_PP_LOCAL_MACRO(180)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(181)
|
||||
BOOST_PP_LOCAL_MACRO(181)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(182)
|
||||
BOOST_PP_LOCAL_MACRO(182)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(183)
|
||||
BOOST_PP_LOCAL_MACRO(183)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(184)
|
||||
BOOST_PP_LOCAL_MACRO(184)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(185)
|
||||
BOOST_PP_LOCAL_MACRO(185)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(186)
|
||||
BOOST_PP_LOCAL_MACRO(186)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(187)
|
||||
BOOST_PP_LOCAL_MACRO(187)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(188)
|
||||
BOOST_PP_LOCAL_MACRO(188)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(189)
|
||||
BOOST_PP_LOCAL_MACRO(189)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(190)
|
||||
BOOST_PP_LOCAL_MACRO(190)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(191)
|
||||
BOOST_PP_LOCAL_MACRO(191)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(192)
|
||||
BOOST_PP_LOCAL_MACRO(192)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(193)
|
||||
BOOST_PP_LOCAL_MACRO(193)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(194)
|
||||
BOOST_PP_LOCAL_MACRO(194)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(195)
|
||||
BOOST_PP_LOCAL_MACRO(195)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(196)
|
||||
BOOST_PP_LOCAL_MACRO(196)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(197)
|
||||
BOOST_PP_LOCAL_MACRO(197)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(198)
|
||||
BOOST_PP_LOCAL_MACRO(198)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(199)
|
||||
BOOST_PP_LOCAL_MACRO(199)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(200)
|
||||
BOOST_PP_LOCAL_MACRO(200)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(201)
|
||||
BOOST_PP_LOCAL_MACRO(201)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(202)
|
||||
BOOST_PP_LOCAL_MACRO(202)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(203)
|
||||
BOOST_PP_LOCAL_MACRO(203)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(204)
|
||||
BOOST_PP_LOCAL_MACRO(204)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(205)
|
||||
BOOST_PP_LOCAL_MACRO(205)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(206)
|
||||
BOOST_PP_LOCAL_MACRO(206)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(207)
|
||||
BOOST_PP_LOCAL_MACRO(207)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(208)
|
||||
BOOST_PP_LOCAL_MACRO(208)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(209)
|
||||
BOOST_PP_LOCAL_MACRO(209)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(210)
|
||||
BOOST_PP_LOCAL_MACRO(210)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(211)
|
||||
BOOST_PP_LOCAL_MACRO(211)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(212)
|
||||
BOOST_PP_LOCAL_MACRO(212)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(213)
|
||||
BOOST_PP_LOCAL_MACRO(213)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(214)
|
||||
BOOST_PP_LOCAL_MACRO(214)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(215)
|
||||
BOOST_PP_LOCAL_MACRO(215)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(216)
|
||||
BOOST_PP_LOCAL_MACRO(216)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(217)
|
||||
BOOST_PP_LOCAL_MACRO(217)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(218)
|
||||
BOOST_PP_LOCAL_MACRO(218)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(219)
|
||||
BOOST_PP_LOCAL_MACRO(219)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(220)
|
||||
BOOST_PP_LOCAL_MACRO(220)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(221)
|
||||
BOOST_PP_LOCAL_MACRO(221)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(222)
|
||||
BOOST_PP_LOCAL_MACRO(222)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(223)
|
||||
BOOST_PP_LOCAL_MACRO(223)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(224)
|
||||
BOOST_PP_LOCAL_MACRO(224)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(225)
|
||||
BOOST_PP_LOCAL_MACRO(225)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(226)
|
||||
BOOST_PP_LOCAL_MACRO(226)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(227)
|
||||
BOOST_PP_LOCAL_MACRO(227)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(228)
|
||||
BOOST_PP_LOCAL_MACRO(228)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(229)
|
||||
BOOST_PP_LOCAL_MACRO(229)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(230)
|
||||
BOOST_PP_LOCAL_MACRO(230)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(231)
|
||||
BOOST_PP_LOCAL_MACRO(231)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(232)
|
||||
BOOST_PP_LOCAL_MACRO(232)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(233)
|
||||
BOOST_PP_LOCAL_MACRO(233)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(234)
|
||||
BOOST_PP_LOCAL_MACRO(234)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(235)
|
||||
BOOST_PP_LOCAL_MACRO(235)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(236)
|
||||
BOOST_PP_LOCAL_MACRO(236)
|
||||
# endif
|
||||
|
||||
# if BOOST_PP_LOCAL_C(237)
|
||||
BOOST_PP_LOCAL_MACRO(237)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(238)
|
||||
BOOST_PP_LOCAL_MACRO(238)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(239)
|
||||
BOOST_PP_LOCAL_MACRO(239)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(240)
|
||||
BOOST_PP_LOCAL_MACRO(240)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(241)
|
||||
BOOST_PP_LOCAL_MACRO(241)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(242)
|
||||
BOOST_PP_LOCAL_MACRO(242)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(243)
|
||||
BOOST_PP_LOCAL_MACRO(243)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(244)
|
||||
BOOST_PP_LOCAL_MACRO(244)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(245)
|
||||
BOOST_PP_LOCAL_MACRO(245)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(246)
|
||||
BOOST_PP_LOCAL_MACRO(246)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(247)
|
||||
BOOST_PP_LOCAL_MACRO(247)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(248)
|
||||
BOOST_PP_LOCAL_MACRO(248)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(249)
|
||||
BOOST_PP_LOCAL_MACRO(249)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(250)
|
||||
BOOST_PP_LOCAL_MACRO(250)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(251)
|
||||
BOOST_PP_LOCAL_MACRO(251)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(252)
|
||||
BOOST_PP_LOCAL_MACRO(252)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(253)
|
||||
BOOST_PP_LOCAL_MACRO(253)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(254)
|
||||
BOOST_PP_LOCAL_MACRO(254)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(255)
|
||||
BOOST_PP_LOCAL_MACRO(255)
|
||||
# endif
|
||||
# if BOOST_PP_LOCAL_C(256)
|
||||
BOOST_PP_LOCAL_MACRO(256)
|
||||
# endif
|
||||
# endif
|
||||
#
|
||||
# undef BOOST_PP_LOCAL_LIMITS
|
||||
#
|
||||
# undef BOOST_PP_LOCAL_S
|
||||
# undef BOOST_PP_LOCAL_F
|
||||
#
|
||||
# undef BOOST_PP_LOCAL_MACRO
|
||||
@@ -0,0 +1,56 @@
|
||||
#ifndef BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
|
||||
#define BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
|
||||
|
||||
// MS compatible compilers support #pragma once
|
||||
#if defined(_MSC_VER)
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
|
||||
// binary_wiarchive.hpp
|
||||
|
||||
// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
|
||||
// Use, modification and distribution is 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)
|
||||
|
||||
// See http://www.boost.org for updates, documentation, and revision history.
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#ifdef BOOST_NO_STD_WSTREAMBUF
|
||||
#error "wide char i/o not supported on this platform"
|
||||
#else
|
||||
|
||||
#include <istream> // wistream
|
||||
#include <boost/archive/binary_iarchive_impl.hpp>
|
||||
#include <boost/archive/detail/register_archive.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace archive {
|
||||
|
||||
class binary_wiarchive :
|
||||
public binary_iarchive_impl<
|
||||
binary_wiarchive, std::wistream::char_type, std::wistream::traits_type
|
||||
>
|
||||
{
|
||||
public:
|
||||
binary_wiarchive(std::wistream & is, unsigned int flags = 0) :
|
||||
binary_iarchive_impl<
|
||||
binary_wiarchive, std::wistream::char_type, std::wistream::traits_type
|
||||
>(is, flags)
|
||||
{}
|
||||
binary_wiarchive(std::wstreambuf & bsb, unsigned int flags = 0) :
|
||||
binary_iarchive_impl<
|
||||
binary_wiarchive, std::wistream::char_type, std::wistream::traits_type
|
||||
>(bsb, flags)
|
||||
{}
|
||||
};
|
||||
|
||||
} // namespace archive
|
||||
} // namespace boost
|
||||
|
||||
// required by export
|
||||
BOOST_SERIALIZATION_REGISTER_ARCHIVE(boost::archive::binary_wiarchive)
|
||||
|
||||
#endif // BOOST_NO_STD_WSTREAMBUF
|
||||
#endif // BOOST_ARCHIVE_BINARY_WIARCHIVE_HPP
|
||||
@@ -0,0 +1,118 @@
|
||||
// (C) Copyright Jeremy Siek 2004
|
||||
// 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_QUEUE_HPP
|
||||
#define BOOST_QUEUE_HPP
|
||||
|
||||
#include <deque>
|
||||
#include <algorithm>
|
||||
|
||||
namespace boost {
|
||||
|
||||
template <class _Tp,
|
||||
class _Sequence = std::deque<_Tp> >
|
||||
class queue;
|
||||
|
||||
template <class _Tp, class _Seq>
|
||||
inline bool operator==(const queue<_Tp, _Seq>&, const queue<_Tp, _Seq>&);
|
||||
|
||||
template <class _Tp, class _Seq>
|
||||
inline bool operator<(const queue<_Tp, _Seq>&, const queue<_Tp, _Seq>&);
|
||||
|
||||
|
||||
template <class _Tp, class _Sequence>
|
||||
class queue {
|
||||
|
||||
#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
|
||||
template <class _Tp1, class _Seq1>
|
||||
friend bool operator== (const queue<_Tp1, _Seq1>&,
|
||||
const queue<_Tp1, _Seq1>&);
|
||||
template <class _Tp1, class _Seq1>
|
||||
friend bool operator< (const queue<_Tp1, _Seq1>&,
|
||||
const queue<_Tp1, _Seq1>&);
|
||||
#endif
|
||||
public:
|
||||
typedef typename _Sequence::value_type value_type;
|
||||
typedef typename _Sequence::size_type size_type;
|
||||
typedef _Sequence container_type;
|
||||
|
||||
typedef typename _Sequence::reference reference;
|
||||
typedef typename _Sequence::const_reference const_reference;
|
||||
#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
|
||||
protected:
|
||||
#endif
|
||||
_Sequence c;
|
||||
public:
|
||||
queue() : c() {}
|
||||
explicit queue(const _Sequence& __c) : c(__c) {}
|
||||
|
||||
bool empty() const { return c.empty(); }
|
||||
size_type size() const { return c.size(); }
|
||||
reference front() { return c.front(); }
|
||||
const_reference front() const { return c.front(); }
|
||||
reference top() { return c.front(); }
|
||||
const_reference top() const { return c.front(); }
|
||||
reference back() { return c.back(); }
|
||||
const_reference back() const { return c.back(); }
|
||||
void push(const value_type& __x) { c.push_back(__x); }
|
||||
void pop() { c.pop_front(); }
|
||||
|
||||
void swap(queue& other)
|
||||
{
|
||||
using std::swap;
|
||||
swap(c, other.c);
|
||||
}
|
||||
};
|
||||
|
||||
template <class _Tp, class _Sequence>
|
||||
bool
|
||||
operator==(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
|
||||
{
|
||||
return __x.c == __y.c;
|
||||
}
|
||||
|
||||
template <class _Tp, class _Sequence>
|
||||
bool
|
||||
operator<(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
|
||||
{
|
||||
return __x.c < __y.c;
|
||||
}
|
||||
|
||||
template <class _Tp, class _Sequence>
|
||||
bool
|
||||
operator!=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
|
||||
{
|
||||
return !(__x == __y);
|
||||
}
|
||||
|
||||
template <class _Tp, class _Sequence>
|
||||
bool
|
||||
operator>(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
|
||||
{
|
||||
return __y < __x;
|
||||
}
|
||||
|
||||
template <class _Tp, class _Sequence>
|
||||
bool
|
||||
operator<=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
|
||||
{
|
||||
return !(__y < __x);
|
||||
}
|
||||
|
||||
template <class _Tp, class _Sequence>
|
||||
bool
|
||||
operator>=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
|
||||
{
|
||||
return !(__x < __y);
|
||||
}
|
||||
|
||||
template <class _Tp, class _Sequence>
|
||||
inline void
|
||||
swap(queue<_Tp, _Sequence>& __x, queue<_Tp, _Sequence>& __y)
|
||||
{ __x.swap(__y); }
|
||||
|
||||
} /* namespace boost */
|
||||
|
||||
#endif /* BOOST_QUEUE_HPP */
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,194 @@
|
||||
/*==============================================================================
|
||||
Copyright (c) 2005-2010 Joel de Guzman
|
||||
Copyright (c) 2010-2011 Thomas Heller
|
||||
|
||||
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_PHOENIX_SCOPE_LOCAL_VARIABLE_HPP
|
||||
#define BOOST_PHOENIX_SCOPE_LOCAL_VARIABLE_HPP
|
||||
|
||||
#include <boost/phoenix/core/limits.hpp>
|
||||
#include <boost/phoenix/core/call.hpp>
|
||||
#include <boost/phoenix/core/expression.hpp>
|
||||
#include <boost/phoenix/core/reference.hpp>
|
||||
#include <boost/phoenix/core/value.hpp>
|
||||
#include <boost/phoenix/scope/scoped_environment.hpp>
|
||||
#include <boost/phoenix/scope/detail/local_variable.hpp>
|
||||
#include <boost/phoenix/statement/sequence.hpp>
|
||||
|
||||
namespace boost { namespace phoenix
|
||||
{
|
||||
namespace expression
|
||||
{
|
||||
template <typename Key>
|
||||
struct local_variable
|
||||
: expression::terminal<detail::local<Key> >
|
||||
{
|
||||
typedef typename expression::terminal<detail::local<Key> >::type type;
|
||||
|
||||
static type make()
|
||||
{
|
||||
type const e = {};
|
||||
return e;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
namespace rule
|
||||
{
|
||||
struct local_variable
|
||||
: expression::local_variable<proto::_>
|
||||
{};
|
||||
|
||||
struct local_var_def
|
||||
: proto::assign<local_variable, meta_grammar>
|
||||
{};
|
||||
}
|
||||
|
||||
namespace result_of
|
||||
{
|
||||
template <typename Key>
|
||||
struct is_nullary<custom_terminal<detail::local<Key> > >
|
||||
: mpl::false_
|
||||
{};
|
||||
}
|
||||
|
||||
namespace detail
|
||||
{
|
||||
struct scope_is_nullary_actions
|
||||
{
|
||||
template <typename Rule, typename Dummy = void>
|
||||
struct when
|
||||
: boost::phoenix::is_nullary::when<Rule, Dummy>
|
||||
{};
|
||||
};
|
||||
|
||||
template <typename Dummy>
|
||||
struct scope_is_nullary_actions::when<boost::phoenix::rule::custom_terminal, Dummy>
|
||||
: proto::or_<
|
||||
proto::when<boost::phoenix::rule::local_variable, mpl::true_()>
|
||||
, proto::otherwise<
|
||||
is_nullary::when<boost::phoenix::rule::custom_terminal, Dummy>
|
||||
>
|
||||
>
|
||||
{};
|
||||
|
||||
struct local_var_not_found
|
||||
{
|
||||
};
|
||||
}
|
||||
|
||||
template<typename Key>
|
||||
struct is_custom_terminal<detail::local<Key> >
|
||||
: mpl::true_
|
||||
{};
|
||||
|
||||
template <typename Key>
|
||||
struct custom_terminal<detail::local<Key> >
|
||||
{
|
||||
template <typename Sig>
|
||||
struct result;
|
||||
|
||||
template <typename This, typename Local, typename Context>
|
||||
struct result<This(Local, Context)>
|
||||
: result<This(Local const &, Context)>
|
||||
{};
|
||||
|
||||
template <typename This, typename Local, typename Context>
|
||||
struct result<This(Local &, Context)>
|
||||
{
|
||||
typedef
|
||||
typename remove_reference<
|
||||
typename result_of::env<Context>::type
|
||||
>::type
|
||||
env_type;
|
||||
|
||||
typedef typename detail::apply_local<detail::local<Key>, env_type>::type type;
|
||||
};
|
||||
|
||||
template <typename Local, typename Context>
|
||||
typename result<custom_terminal(Local const &, Context const&)>::type
|
||||
operator()(Local, Context const & ctx)
|
||||
{
|
||||
typedef
|
||||
typename remove_reference<
|
||||
typename result_of::env<Context>::type
|
||||
>::type
|
||||
env_type;
|
||||
|
||||
typedef typename detail::apply_local<detail::local<Key>, env_type>::type return_type;
|
||||
|
||||
static const int index_value = detail::get_index<typename env_type::map_type, detail::local<Key> >::value;
|
||||
|
||||
typedef detail::eval_local<Key> eval_local;
|
||||
|
||||
// Detect if the return_type is for a value.
|
||||
//typedef typename is_value<return_type>::type is_value_type;
|
||||
|
||||
return eval_local::template get<return_type, index_value>(
|
||||
phoenix::env(ctx));
|
||||
}
|
||||
};
|
||||
|
||||
namespace local_names
|
||||
{
|
||||
typedef expression::local_variable<struct _a_key>::type _a_type;
|
||||
typedef expression::local_variable<struct _b_key>::type _b_type;
|
||||
typedef expression::local_variable<struct _c_key>::type _c_type;
|
||||
typedef expression::local_variable<struct _d_key>::type _d_type;
|
||||
typedef expression::local_variable<struct _e_key>::type _e_type;
|
||||
typedef expression::local_variable<struct _f_key>::type _f_type;
|
||||
typedef expression::local_variable<struct _g_key>::type _g_type;
|
||||
typedef expression::local_variable<struct _h_key>::type _h_type;
|
||||
typedef expression::local_variable<struct _i_key>::type _i_type;
|
||||
typedef expression::local_variable<struct _j_key>::type _j_type;
|
||||
typedef expression::local_variable<struct _k_key>::type _k_type;
|
||||
typedef expression::local_variable<struct _l_key>::type _l_type;
|
||||
typedef expression::local_variable<struct _m_key>::type _m_type;
|
||||
typedef expression::local_variable<struct _n_key>::type _n_type;
|
||||
typedef expression::local_variable<struct _o_key>::type _o_type;
|
||||
typedef expression::local_variable<struct _p_key>::type _p_type;
|
||||
typedef expression::local_variable<struct _q_key>::type _q_type;
|
||||
typedef expression::local_variable<struct _r_key>::type _r_type;
|
||||
typedef expression::local_variable<struct _s_key>::type _s_type;
|
||||
typedef expression::local_variable<struct _t_key>::type _t_type;
|
||||
typedef expression::local_variable<struct _u_key>::type _u_type;
|
||||
typedef expression::local_variable<struct _v_key>::type _v_type;
|
||||
typedef expression::local_variable<struct _w_key>::type _w_type;
|
||||
typedef expression::local_variable<struct _x_key>::type _x_type;
|
||||
typedef expression::local_variable<struct _y_key>::type _y_type;
|
||||
typedef expression::local_variable<struct _z_key>::type _z_type;
|
||||
|
||||
#ifndef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
|
||||
BOOST_ATTRIBUTE_UNUSED _a_type const _a = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _b_type const _b = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _c_type const _c = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _d_type const _d = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _e_type const _e = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _f_type const _f = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _g_type const _g = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _h_type const _h = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _i_type const _i = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _j_type const _j = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _k_type const _k = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _l_type const _l = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _m_type const _m = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _n_type const _n = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _o_type const _o = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _p_type const _p = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _q_type const _q = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _r_type const _r = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _s_type const _s = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _t_type const _t = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _u_type const _u = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _v_type const _v = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _w_type const _w = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _x_type const _x = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _y_type const _y = {{{}}};
|
||||
BOOST_ATTRIBUTE_UNUSED _z_type const _z = {{{}}};
|
||||
#endif
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,250 @@
|
||||
//---------------------------------------------------------------------------//
|
||||
// Copyright (c) 2013-2014 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_CONTAINER_MAPPED_VIEW_HPP
|
||||
#define BOOST_COMPUTE_CONTAINER_MAPPED_VIEW_HPP
|
||||
|
||||
#include <cstddef>
|
||||
#include <exception>
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/throw_exception.hpp>
|
||||
|
||||
#include <boost/compute/buffer.hpp>
|
||||
#include <boost/compute/system.hpp>
|
||||
#include <boost/compute/context.hpp>
|
||||
#include <boost/compute/command_queue.hpp>
|
||||
#include <boost/compute/iterator/buffer_iterator.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace compute {
|
||||
|
||||
/// \class mapped_view
|
||||
/// \brief A mapped view of host memory.
|
||||
///
|
||||
/// The mapped_view class simplifies mapping host-memory to a compute
|
||||
/// device. This allows for host-allocated memory to be used with the
|
||||
/// Boost.Compute algorithms.
|
||||
///
|
||||
/// The following example shows how to map a simple C-array containing
|
||||
/// data on the host to the device and run the reduce() algorithm to
|
||||
/// calculate the sum:
|
||||
///
|
||||
/// \snippet test/test_mapped_view.cpp reduce
|
||||
///
|
||||
/// \see buffer
|
||||
template<class T>
|
||||
class mapped_view
|
||||
{
|
||||
public:
|
||||
typedef T value_type;
|
||||
typedef size_t size_type;
|
||||
typedef ptrdiff_t difference_type;
|
||||
typedef buffer_iterator<T> iterator;
|
||||
typedef buffer_iterator<T> const_iterator;
|
||||
|
||||
/// Creates a null mapped_view object.
|
||||
mapped_view()
|
||||
{
|
||||
m_mapped_ptr = 0;
|
||||
}
|
||||
|
||||
/// Creates a mapped_view for \p host_ptr with \p n elements. After
|
||||
/// constructing a mapped_view the data is available for use by a
|
||||
/// compute device. Use the \p unmap() method to make the updated data
|
||||
/// available to the host.
|
||||
mapped_view(T *host_ptr,
|
||||
size_type n,
|
||||
const context &context = system::default_context())
|
||||
: m_buffer(_make_mapped_buffer(host_ptr, n, context))
|
||||
{
|
||||
m_mapped_ptr = 0;
|
||||
}
|
||||
|
||||
/// Creates a read-only mapped_view for \p host_ptr with \p n elements.
|
||||
/// After constructing a mapped_view the data is available for use by a
|
||||
/// compute device. Use the \p unmap() method to make the updated data
|
||||
/// available to the host.
|
||||
mapped_view(const T *host_ptr,
|
||||
size_type n,
|
||||
const context &context = system::default_context())
|
||||
: m_buffer(_make_mapped_buffer(host_ptr, n, context))
|
||||
{
|
||||
m_mapped_ptr = 0;
|
||||
}
|
||||
|
||||
/// Creates a copy of \p other.
|
||||
mapped_view(const mapped_view<T> &other)
|
||||
: m_buffer(other.m_buffer)
|
||||
{
|
||||
m_mapped_ptr = 0;
|
||||
}
|
||||
|
||||
/// Copies the mapped buffer from \p other.
|
||||
mapped_view<T>& operator=(const mapped_view<T> &other)
|
||||
{
|
||||
if(this != &other){
|
||||
m_buffer = other.m_buffer;
|
||||
m_mapped_ptr = 0;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/// Destroys the mapped_view object.
|
||||
~mapped_view()
|
||||
{
|
||||
}
|
||||
|
||||
/// Returns an iterator to the first element in the mapped_view.
|
||||
iterator begin()
|
||||
{
|
||||
return ::boost::compute::make_buffer_iterator<T>(m_buffer, 0);
|
||||
}
|
||||
|
||||
/// Returns a const_iterator to the first element in the mapped_view.
|
||||
const_iterator begin() const
|
||||
{
|
||||
return ::boost::compute::make_buffer_iterator<T>(m_buffer, 0);
|
||||
}
|
||||
|
||||
/// Returns a const_iterator to the first element in the mapped_view.
|
||||
const_iterator cbegin() const
|
||||
{
|
||||
return begin();
|
||||
}
|
||||
|
||||
/// Returns an iterator to one past the last element in the mapped_view.
|
||||
iterator end()
|
||||
{
|
||||
return ::boost::compute::make_buffer_iterator<T>(m_buffer, size());
|
||||
}
|
||||
|
||||
/// Returns a const_iterator to one past the last element in the mapped_view.
|
||||
const_iterator end() const
|
||||
{
|
||||
return ::boost::compute::make_buffer_iterator<T>(m_buffer, size());
|
||||
}
|
||||
|
||||
/// Returns a const_iterator to one past the last element in the mapped_view.
|
||||
const_iterator cend() const
|
||||
{
|
||||
return end();
|
||||
}
|
||||
|
||||
/// Returns the number of elements in the mapped_view.
|
||||
size_type size() const
|
||||
{
|
||||
return m_buffer.size() / sizeof(T);
|
||||
}
|
||||
|
||||
/// Returns the host data pointer.
|
||||
T* get_host_ptr()
|
||||
{
|
||||
return static_cast<T *>(m_buffer.get_info<void *>(CL_MEM_HOST_PTR));
|
||||
}
|
||||
|
||||
/// Returns the host data pointer.
|
||||
const T* get_host_ptr() const
|
||||
{
|
||||
return static_cast<T *>(m_buffer.get_info<void *>(CL_MEM_HOST_PTR));
|
||||
}
|
||||
|
||||
/// Resizes the mapped_view to \p size elements.
|
||||
void resize(size_type size)
|
||||
{
|
||||
T *old_ptr = get_host_ptr();
|
||||
|
||||
m_buffer = _make_mapped_buffer(old_ptr, size, m_buffer.get_context());
|
||||
}
|
||||
|
||||
/// Returns \c true if the mapped_view is empty.
|
||||
bool empty() const
|
||||
{
|
||||
return size() == 0;
|
||||
}
|
||||
|
||||
/// Returns the mapped buffer.
|
||||
const buffer& get_buffer() const
|
||||
{
|
||||
return m_buffer;
|
||||
}
|
||||
|
||||
/// Maps the buffer into the host address space.
|
||||
///
|
||||
/// \see_opencl_ref{clEnqueueMapBuffer}
|
||||
void map(cl_map_flags flags, command_queue &queue)
|
||||
{
|
||||
BOOST_ASSERT(m_mapped_ptr == 0);
|
||||
|
||||
m_mapped_ptr = queue.enqueue_map_buffer(
|
||||
m_buffer, flags, 0, m_buffer.size()
|
||||
);
|
||||
}
|
||||
|
||||
/// Maps the buffer into the host address space for reading and writing.
|
||||
///
|
||||
/// Equivalent to:
|
||||
/// \code
|
||||
/// map(CL_MAP_READ | CL_MAP_WRITE, queue);
|
||||
/// \endcode
|
||||
void map(command_queue &queue)
|
||||
{
|
||||
map(CL_MAP_READ | CL_MAP_WRITE, queue);
|
||||
}
|
||||
|
||||
/// Unmaps the buffer from the host address space.
|
||||
///
|
||||
/// \see_opencl_ref{clEnqueueUnmapMemObject}
|
||||
void unmap(command_queue &queue)
|
||||
{
|
||||
BOOST_ASSERT(m_mapped_ptr != 0);
|
||||
|
||||
queue.enqueue_unmap_buffer(m_buffer, m_mapped_ptr);
|
||||
|
||||
m_mapped_ptr = 0;
|
||||
}
|
||||
|
||||
private:
|
||||
/// \internal_
|
||||
static buffer _make_mapped_buffer(T *host_ptr,
|
||||
size_t n,
|
||||
const context &context)
|
||||
{
|
||||
return buffer(
|
||||
context,
|
||||
n * sizeof(T),
|
||||
buffer::read_write | buffer::use_host_ptr,
|
||||
host_ptr
|
||||
);
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
static buffer _make_mapped_buffer(const T *host_ptr,
|
||||
size_t n,
|
||||
const context &context)
|
||||
{
|
||||
return buffer(
|
||||
context,
|
||||
n * sizeof(T),
|
||||
buffer::read_only | buffer::use_host_ptr,
|
||||
const_cast<void *>(static_cast<const void *>(host_ptr))
|
||||
);
|
||||
}
|
||||
|
||||
private:
|
||||
buffer m_buffer;
|
||||
void *m_mapped_ptr;
|
||||
};
|
||||
|
||||
} // end compute namespace
|
||||
} // end boost namespace
|
||||
|
||||
#endif // BOOST_COMPUTE_CONTAINER_MAPPED_VIEW_HPP
|
||||
@@ -0,0 +1,198 @@
|
||||
//
|
||||
// Copyright (c) 2000-2002
|
||||
// Joerg Walter, Mathias Koch
|
||||
//
|
||||
// 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)
|
||||
//
|
||||
// The authors gratefully acknowledge the support of
|
||||
// GeNeSys mbH & Co. KG in producing this work.
|
||||
//
|
||||
|
||||
#ifndef _BOOST_UBLAS_OPERATION_SPARSE_
|
||||
#define _BOOST_UBLAS_OPERATION_SPARSE_
|
||||
|
||||
#include <boost/numeric/ublas/traits.hpp>
|
||||
|
||||
// These scaled additions were borrowed from MTL unashamedly.
|
||||
// But Alexei Novakov had a lot of ideas to improve these. Thanks.
|
||||
|
||||
namespace boost { namespace numeric { namespace ublas {
|
||||
|
||||
template<class M, class E1, class E2, class TRI>
|
||||
BOOST_UBLAS_INLINE
|
||||
M &
|
||||
sparse_prod (const matrix_expression<E1> &e1,
|
||||
const matrix_expression<E2> &e2,
|
||||
M &m, TRI,
|
||||
row_major_tag) {
|
||||
typedef M matrix_type;
|
||||
typedef TRI triangular_restriction;
|
||||
typedef const E1 expression1_type;
|
||||
typedef const E2 expression2_type;
|
||||
typedef typename M::size_type size_type;
|
||||
typedef typename M::value_type value_type;
|
||||
|
||||
// ISSUE why is there a dense vector here?
|
||||
vector<value_type> temporary (e2 ().size2 ());
|
||||
temporary.clear ();
|
||||
typename expression1_type::const_iterator1 it1 (e1 ().begin1 ());
|
||||
typename expression1_type::const_iterator1 it1_end (e1 ().end1 ());
|
||||
while (it1 != it1_end) {
|
||||
size_type jb (temporary.size ());
|
||||
size_type je (0);
|
||||
#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
|
||||
typename expression1_type::const_iterator2 it2 (it1.begin ());
|
||||
typename expression1_type::const_iterator2 it2_end (it1.end ());
|
||||
#else
|
||||
typename expression1_type::const_iterator2 it2 (boost::numeric::ublas::begin (it1, iterator1_tag ()));
|
||||
typename expression1_type::const_iterator2 it2_end (boost::numeric::ublas::end (it1, iterator1_tag ()));
|
||||
#endif
|
||||
while (it2 != it2_end) {
|
||||
// temporary.plus_assign (*it2 * row (e2 (), it2.index2 ()));
|
||||
matrix_row<expression2_type> mr (e2 (), it2.index2 ());
|
||||
typename matrix_row<expression2_type>::const_iterator itr (mr.begin ());
|
||||
typename matrix_row<expression2_type>::const_iterator itr_end (mr.end ());
|
||||
while (itr != itr_end) {
|
||||
size_type j (itr.index ());
|
||||
temporary (j) += *it2 * *itr;
|
||||
jb = (std::min) (jb, j);
|
||||
je = (std::max) (je, j);
|
||||
++ itr;
|
||||
}
|
||||
++ it2;
|
||||
}
|
||||
for (size_type j = jb; j < je + 1; ++ j) {
|
||||
if (temporary (j) != value_type/*zero*/()) {
|
||||
// FIXME we'll need to extend the container interface!
|
||||
// m.push_back (it1.index1 (), j, temporary (j));
|
||||
// FIXME What to do with adaptors?
|
||||
// m.insert (it1.index1 (), j, temporary (j));
|
||||
if (triangular_restriction::other (it1.index1 (), j))
|
||||
m (it1.index1 (), j) = temporary (j);
|
||||
temporary (j) = value_type/*zero*/();
|
||||
}
|
||||
}
|
||||
++ it1;
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
template<class M, class E1, class E2, class TRI>
|
||||
BOOST_UBLAS_INLINE
|
||||
M &
|
||||
sparse_prod (const matrix_expression<E1> &e1,
|
||||
const matrix_expression<E2> &e2,
|
||||
M &m, TRI,
|
||||
column_major_tag) {
|
||||
typedef M matrix_type;
|
||||
typedef TRI triangular_restriction;
|
||||
typedef const E1 expression1_type;
|
||||
typedef const E2 expression2_type;
|
||||
typedef typename M::size_type size_type;
|
||||
typedef typename M::value_type value_type;
|
||||
|
||||
// ISSUE why is there a dense vector here?
|
||||
vector<value_type> temporary (e1 ().size1 ());
|
||||
temporary.clear ();
|
||||
typename expression2_type::const_iterator2 it2 (e2 ().begin2 ());
|
||||
typename expression2_type::const_iterator2 it2_end (e2 ().end2 ());
|
||||
while (it2 != it2_end) {
|
||||
size_type ib (temporary.size ());
|
||||
size_type ie (0);
|
||||
#ifndef BOOST_UBLAS_NO_NESTED_CLASS_RELATION
|
||||
typename expression2_type::const_iterator1 it1 (it2.begin ());
|
||||
typename expression2_type::const_iterator1 it1_end (it2.end ());
|
||||
#else
|
||||
typename expression2_type::const_iterator1 it1 (boost::numeric::ublas::begin (it2, iterator2_tag ()));
|
||||
typename expression2_type::const_iterator1 it1_end (boost::numeric::ublas::end (it2, iterator2_tag ()));
|
||||
#endif
|
||||
while (it1 != it1_end) {
|
||||
// column (m, it2.index2 ()).plus_assign (*it1 * column (e1 (), it1.index1 ()));
|
||||
matrix_column<expression1_type> mc (e1 (), it1.index1 ());
|
||||
typename matrix_column<expression1_type>::const_iterator itc (mc.begin ());
|
||||
typename matrix_column<expression1_type>::const_iterator itc_end (mc.end ());
|
||||
while (itc != itc_end) {
|
||||
size_type i (itc.index ());
|
||||
temporary (i) += *it1 * *itc;
|
||||
ib = (std::min) (ib, i);
|
||||
ie = (std::max) (ie, i);
|
||||
++ itc;
|
||||
}
|
||||
++ it1;
|
||||
}
|
||||
for (size_type i = ib; i < ie + 1; ++ i) {
|
||||
if (temporary (i) != value_type/*zero*/()) {
|
||||
// FIXME we'll need to extend the container interface!
|
||||
// m.push_back (i, it2.index2 (), temporary (i));
|
||||
// FIXME What to do with adaptors?
|
||||
// m.insert (i, it2.index2 (), temporary (i));
|
||||
if (triangular_restriction::other (i, it2.index2 ()))
|
||||
m (i, it2.index2 ()) = temporary (i);
|
||||
temporary (i) = value_type/*zero*/();
|
||||
}
|
||||
}
|
||||
++ it2;
|
||||
}
|
||||
return m;
|
||||
}
|
||||
|
||||
// Dispatcher
|
||||
template<class M, class E1, class E2, class TRI>
|
||||
BOOST_UBLAS_INLINE
|
||||
M &
|
||||
sparse_prod (const matrix_expression<E1> &e1,
|
||||
const matrix_expression<E2> &e2,
|
||||
M &m, TRI, bool init = true) {
|
||||
typedef typename M::value_type value_type;
|
||||
typedef TRI triangular_restriction;
|
||||
typedef typename M::orientation_category orientation_category;
|
||||
|
||||
if (init)
|
||||
m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
|
||||
return sparse_prod (e1, e2, m, triangular_restriction (), orientation_category ());
|
||||
}
|
||||
template<class M, class E1, class E2, class TRI>
|
||||
BOOST_UBLAS_INLINE
|
||||
M
|
||||
sparse_prod (const matrix_expression<E1> &e1,
|
||||
const matrix_expression<E2> &e2,
|
||||
TRI) {
|
||||
typedef M matrix_type;
|
||||
typedef TRI triangular_restriction;
|
||||
|
||||
matrix_type m (e1 ().size1 (), e2 ().size2 ());
|
||||
// FIXME needed for c_matrix?!
|
||||
// return sparse_prod (e1, e2, m, triangular_restriction (), false);
|
||||
return sparse_prod (e1, e2, m, triangular_restriction (), true);
|
||||
}
|
||||
template<class M, class E1, class E2>
|
||||
BOOST_UBLAS_INLINE
|
||||
M &
|
||||
sparse_prod (const matrix_expression<E1> &e1,
|
||||
const matrix_expression<E2> &e2,
|
||||
M &m, bool init = true) {
|
||||
typedef typename M::value_type value_type;
|
||||
typedef typename M::orientation_category orientation_category;
|
||||
|
||||
if (init)
|
||||
m.assign (zero_matrix<value_type> (e1 ().size1 (), e2 ().size2 ()));
|
||||
return sparse_prod (e1, e2, m, full (), orientation_category ());
|
||||
}
|
||||
template<class M, class E1, class E2>
|
||||
BOOST_UBLAS_INLINE
|
||||
M
|
||||
sparse_prod (const matrix_expression<E1> &e1,
|
||||
const matrix_expression<E2> &e2) {
|
||||
typedef M matrix_type;
|
||||
|
||||
matrix_type m (e1 ().size1 (), e2 ().size2 ());
|
||||
// FIXME needed for c_matrix?!
|
||||
// return sparse_prod (e1, e2, m, full (), false);
|
||||
return sparse_prod (e1, e2, m, full (), true);
|
||||
}
|
||||
|
||||
}}}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,136 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
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)
|
||||
==============================================================================*/
|
||||
#if !defined(FUSION_AT_IMPL_07172005_0726)
|
||||
#define FUSION_AT_IMPL_07172005_0726
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/support/detail/access.hpp>
|
||||
#include <boost/type_traits/is_const.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/mpl/if.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
template <typename Cons>
|
||||
struct cons_deref
|
||||
{
|
||||
typedef typename Cons::car_type type;
|
||||
};
|
||||
|
||||
template <typename Cons, int I>
|
||||
struct cons_advance
|
||||
{
|
||||
typedef typename
|
||||
cons_advance<Cons, I-1>::type::cdr_type
|
||||
type;
|
||||
};
|
||||
|
||||
template <typename Cons>
|
||||
struct cons_advance<Cons, 0>
|
||||
{
|
||||
typedef Cons type;
|
||||
};
|
||||
|
||||
template <typename Cons>
|
||||
struct cons_advance<Cons, 1>
|
||||
{
|
||||
typedef typename Cons::cdr_type type;
|
||||
};
|
||||
|
||||
template <typename Cons>
|
||||
struct cons_advance<Cons, 2>
|
||||
{
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above
|
||||
typedef typename Cons::cdr_type::cdr_type type;
|
||||
#else
|
||||
typedef typename Cons::cdr_type _a;
|
||||
typedef typename _a::cdr_type type;
|
||||
#endif
|
||||
};
|
||||
|
||||
template <typename Cons>
|
||||
struct cons_advance<Cons, 3>
|
||||
{
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above
|
||||
typedef typename Cons::cdr_type::cdr_type::cdr_type type;
|
||||
#else
|
||||
typedef typename Cons::cdr_type _a;
|
||||
typedef typename _a::cdr_type _b;
|
||||
typedef typename _b::cdr_type type;
|
||||
#endif
|
||||
};
|
||||
|
||||
template <typename Cons>
|
||||
struct cons_advance<Cons, 4>
|
||||
{
|
||||
#if BOOST_WORKAROUND(BOOST_MSVC, > 1400) // VC8 and above
|
||||
typedef typename Cons::cdr_type::cdr_type::cdr_type::cdr_type type;
|
||||
#else
|
||||
typedef typename Cons::cdr_type _a;
|
||||
typedef typename _a::cdr_type _b;
|
||||
typedef typename _b::cdr_type _c;
|
||||
typedef typename _c::cdr_type type;
|
||||
#endif
|
||||
};
|
||||
}
|
||||
|
||||
struct cons_tag;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template <typename Tag>
|
||||
struct at_impl;
|
||||
|
||||
template <>
|
||||
struct at_impl<cons_tag>
|
||||
{
|
||||
template <typename Sequence, typename N>
|
||||
struct apply
|
||||
{
|
||||
typedef typename detail::cons_deref<
|
||||
typename detail::cons_advance<Sequence, N::value>::type>::type
|
||||
element;
|
||||
|
||||
typedef typename
|
||||
mpl::if_<
|
||||
is_const<Sequence>
|
||||
, typename detail::cref_result<element>::type
|
||||
, typename detail::ref_result<element>::type
|
||||
>::type
|
||||
type;
|
||||
|
||||
template <typename Cons, int N2>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Cons& s, mpl::int_<N2>)
|
||||
{
|
||||
return call(s.cdr, mpl::int_<N2-1>());
|
||||
}
|
||||
|
||||
template <typename Cons>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Cons& s, mpl::int_<0>)
|
||||
{
|
||||
return s.car;
|
||||
}
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Sequence& s)
|
||||
{
|
||||
return call(s, mpl::int_<N::value>());
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,34 @@
|
||||
|
||||
#ifndef BOOST_MPL_BACK_INSERTER_HPP_INCLUDED
|
||||
#define BOOST_MPL_BACK_INSERTER_HPP_INCLUDED
|
||||
|
||||
// Copyright Aleksey Gurtovoy 2003-2004
|
||||
// Copyright David Abrahams 2003-2004
|
||||
//
|
||||
// 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/mpl for documentation.
|
||||
|
||||
// $Id$
|
||||
// $Date$
|
||||
// $Revision$
|
||||
|
||||
#include <boost/mpl/push_back.hpp>
|
||||
#include <boost/mpl/inserter.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace mpl {
|
||||
|
||||
template<
|
||||
typename Sequence
|
||||
>
|
||||
struct back_inserter
|
||||
: inserter< Sequence,push_back<> >
|
||||
{
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
#endif // BOOST_MPL_BACK_INSERTER_HPP_INCLUDED
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
#ifndef BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED
|
||||
#define BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED
|
||||
|
||||
// Copyright Aleksey Gurtovoy 2003-2004
|
||||
// Copyright David Abrahams 2003-2004
|
||||
//
|
||||
// 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/mpl for documentation.
|
||||
|
||||
// $Id$
|
||||
// $Date$
|
||||
// $Revision$
|
||||
|
||||
namespace boost { namespace mpl { namespace aux {
|
||||
|
||||
struct map_tag;
|
||||
|
||||
}}}
|
||||
|
||||
#endif // BOOST_MPL_MAP_AUX_TAG_HPP_INCLUDED
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,123 @@
|
||||
|
||||
// (C) Copyright Tobias Schwinger
|
||||
//
|
||||
// Use modification and distribution are subject to the boost Software License,
|
||||
// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
// no include guards, this file is intended for multiple inclusion
|
||||
|
||||
// input: BOOST_FT_syntax type macro to use
|
||||
// input: BOOST_FT_cc empty or cc specifier
|
||||
// input: BOOST_FT_ell empty or "..."
|
||||
// input: BOOST_FT_cv empty or cv qualifiers
|
||||
// input: BOOST_FT_flags single decimal integer encoding the flags
|
||||
// output: BOOST_FT_n number of component types (arity+1)
|
||||
// output: BOOST_FT_arity current arity
|
||||
// output: BOOST_FT_type macro that expands to the type
|
||||
// output: BOOST_FT_tplargs(p) template arguments with given prefix
|
||||
// output: BOOST_FT_params(p) parameters with given prefix
|
||||
|
||||
# include <boost/function_types/detail/components_impl/arity20_1.hpp>
|
||||
template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20, typename L>
|
||||
struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv, L>
|
||||
{
|
||||
typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
|
||||
typedef constant<BOOST_FT_full_mask> mask;
|
||||
typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 BOOST_FT_ell) BOOST_FT_cv, L> type;
|
||||
typedef components_mpl_sequence_tag tag;
|
||||
typedef mpl::integral_c<std::size_t,21> function_arity;
|
||||
typedef mpl::vector22< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > types;
|
||||
};
|
||||
template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21, typename L>
|
||||
struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv, L>
|
||||
{
|
||||
typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
|
||||
typedef constant<BOOST_FT_full_mask> mask;
|
||||
typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 BOOST_FT_ell) BOOST_FT_cv, L> type;
|
||||
typedef components_mpl_sequence_tag tag;
|
||||
typedef mpl::integral_c<std::size_t,22> function_arity;
|
||||
typedef mpl::vector23< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > types;
|
||||
};
|
||||
template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22, typename L>
|
||||
struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv, L>
|
||||
{
|
||||
typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
|
||||
typedef constant<BOOST_FT_full_mask> mask;
|
||||
typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 BOOST_FT_ell) BOOST_FT_cv, L> type;
|
||||
typedef components_mpl_sequence_tag tag;
|
||||
typedef mpl::integral_c<std::size_t,23> function_arity;
|
||||
typedef mpl::vector24< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > types;
|
||||
};
|
||||
template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23, typename L>
|
||||
struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv, L>
|
||||
{
|
||||
typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
|
||||
typedef constant<BOOST_FT_full_mask> mask;
|
||||
typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 BOOST_FT_ell) BOOST_FT_cv, L> type;
|
||||
typedef components_mpl_sequence_tag tag;
|
||||
typedef mpl::integral_c<std::size_t,24> function_arity;
|
||||
typedef mpl::vector25< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > types;
|
||||
};
|
||||
template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24, typename L>
|
||||
struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv, L>
|
||||
{
|
||||
typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
|
||||
typedef constant<BOOST_FT_full_mask> mask;
|
||||
typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 BOOST_FT_ell) BOOST_FT_cv, L> type;
|
||||
typedef components_mpl_sequence_tag tag;
|
||||
typedef mpl::integral_c<std::size_t,25> function_arity;
|
||||
typedef mpl::vector26< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > types;
|
||||
};
|
||||
template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25, typename L>
|
||||
struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 BOOST_FT_ell) BOOST_FT_cv, L>
|
||||
{
|
||||
typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
|
||||
typedef constant<BOOST_FT_full_mask> mask;
|
||||
typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 BOOST_FT_ell) BOOST_FT_cv, L> type;
|
||||
typedef components_mpl_sequence_tag tag;
|
||||
typedef mpl::integral_c<std::size_t,26> function_arity;
|
||||
typedef mpl::vector27< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 > types;
|
||||
};
|
||||
template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26, typename L>
|
||||
struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 BOOST_FT_ell) BOOST_FT_cv, L>
|
||||
{
|
||||
typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
|
||||
typedef constant<BOOST_FT_full_mask> mask;
|
||||
typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 BOOST_FT_ell) BOOST_FT_cv, L> type;
|
||||
typedef components_mpl_sequence_tag tag;
|
||||
typedef mpl::integral_c<std::size_t,27> function_arity;
|
||||
typedef mpl::vector28< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 > types;
|
||||
};
|
||||
template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27, typename L>
|
||||
struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 BOOST_FT_ell) BOOST_FT_cv, L>
|
||||
{
|
||||
typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
|
||||
typedef constant<BOOST_FT_full_mask> mask;
|
||||
typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 BOOST_FT_ell) BOOST_FT_cv, L> type;
|
||||
typedef components_mpl_sequence_tag tag;
|
||||
typedef mpl::integral_c<std::size_t,28> function_arity;
|
||||
typedef mpl::vector29< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 > types;
|
||||
};
|
||||
template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28, typename L>
|
||||
struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 BOOST_FT_ell) BOOST_FT_cv, L>
|
||||
{
|
||||
typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
|
||||
typedef constant<BOOST_FT_full_mask> mask;
|
||||
typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 BOOST_FT_ell) BOOST_FT_cv, L> type;
|
||||
typedef components_mpl_sequence_tag tag;
|
||||
typedef mpl::integral_c<std::size_t,29> function_arity;
|
||||
typedef mpl::vector30< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 > types;
|
||||
};
|
||||
template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29, typename L>
|
||||
struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 BOOST_FT_ell) BOOST_FT_cv, L>
|
||||
{
|
||||
typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
|
||||
typedef constant<BOOST_FT_full_mask> mask;
|
||||
typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 BOOST_FT_ell) BOOST_FT_cv, L> type;
|
||||
typedef components_mpl_sequence_tag tag;
|
||||
typedef mpl::integral_c<std::size_t,30> function_arity;
|
||||
typedef mpl::vector31< R, typename class_transform<T0 BOOST_FT_cv, L> ::type , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 , T25 , T26 , T27 , T28 , T29 > types;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
|
||||
#ifndef BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
|
||||
#define BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
|
||||
|
||||
// Copyright Aleksey Gurtovoy 2000-2004
|
||||
//
|
||||
// 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/mpl for documentation.
|
||||
|
||||
// $Id$
|
||||
// $Date$
|
||||
// $Revision$
|
||||
|
||||
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
|
||||
# include <boost/mpl/list/list20_c.hpp>
|
||||
#endif
|
||||
|
||||
#include <boost/mpl/aux_/config/use_preprocessed.hpp>
|
||||
|
||||
#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
|
||||
&& !defined(BOOST_MPL_PREPROCESSING_MODE)
|
||||
|
||||
# define BOOST_MPL_PREPROCESSED_HEADER list30_c.hpp
|
||||
# include <boost/mpl/list/aux_/include_preprocessed.hpp>
|
||||
|
||||
#else
|
||||
|
||||
# include <boost/preprocessor/iterate.hpp>
|
||||
|
||||
namespace boost { namespace mpl {
|
||||
|
||||
# define BOOST_PP_ITERATION_PARAMS_1 \
|
||||
(3,(21, 30, <boost/mpl/list/aux_/numbered_c.hpp>))
|
||||
# include BOOST_PP_ITERATE()
|
||||
|
||||
}}
|
||||
|
||||
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
|
||||
|
||||
#endif // BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
|
||||
@@ -0,0 +1,149 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
|
||||
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)
|
||||
==============================================================================*/
|
||||
#if !defined(FUSION_FOR_EACH_05052005_1028)
|
||||
#define FUSION_FOR_EACH_05052005_1028
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/end.hpp>
|
||||
#include <boost/fusion/iterator/equal_to.hpp>
|
||||
#include <boost/fusion/iterator/next.hpp>
|
||||
#include <boost/fusion/iterator/deref.hpp>
|
||||
#include <boost/fusion/iterator/distance.hpp>
|
||||
#include <boost/fusion/support/category_of.hpp>
|
||||
#include <boost/mpl/bool.hpp>
|
||||
|
||||
namespace boost { namespace fusion {
|
||||
namespace detail
|
||||
{
|
||||
template <typename First, typename Last, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_linear(First const&, Last const&, F const&, mpl::true_)
|
||||
{
|
||||
}
|
||||
|
||||
template <typename First, typename Last, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_linear(First const& first, Last const& last, F const& f, mpl::false_)
|
||||
{
|
||||
f(*first);
|
||||
detail::for_each_linear(fusion::next(first), last, f,
|
||||
result_of::equal_to<typename result_of::next<First>::type, Last>());
|
||||
}
|
||||
|
||||
|
||||
template <typename Sequence, typename F, typename Tag>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_dispatch(Sequence& seq, F const& f, Tag)
|
||||
{
|
||||
detail::for_each_linear(
|
||||
fusion::begin(seq)
|
||||
, fusion::end(seq)
|
||||
, f
|
||||
, result_of::equal_to<
|
||||
typename result_of::begin<Sequence>::type
|
||||
, typename result_of::end<Sequence>::type>());
|
||||
}
|
||||
|
||||
template<int N>
|
||||
struct for_each_unrolled
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
{
|
||||
f(*i0);
|
||||
typedef typename result_of::next<I0>::type I1;
|
||||
I1 i1(fusion::next(i0));
|
||||
f(*i1);
|
||||
typedef typename result_of::next<I1>::type I2;
|
||||
I2 i2(fusion::next(i1));
|
||||
f(*i2);
|
||||
typedef typename result_of::next<I2>::type I3;
|
||||
I3 i3(fusion::next(i2));
|
||||
f(*i3);
|
||||
for_each_unrolled<N-4>::call(fusion::next(i3), f);
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct for_each_unrolled<3>
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
{
|
||||
f(*i0);
|
||||
typedef typename result_of::next<I0>::type I1;
|
||||
I1 i1(fusion::next(i0));
|
||||
f(*i1);
|
||||
typedef typename result_of::next<I1>::type I2;
|
||||
I2 i2(fusion::next(i1));
|
||||
f(*i2);
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct for_each_unrolled<2>
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
{
|
||||
f(*i0);
|
||||
typedef typename result_of::next<I0>::type I1;
|
||||
I1 i1(fusion::next(i0));
|
||||
f(*i1);
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct for_each_unrolled<1>
|
||||
{
|
||||
template<typename I0, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(I0 const& i0, F const& f)
|
||||
{
|
||||
f(*i0);
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct for_each_unrolled<0>
|
||||
{
|
||||
template<typename It, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static void call(It const&, F const&)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each_dispatch(Sequence& seq, F const& f, random_access_traversal_tag)
|
||||
{
|
||||
typedef typename result_of::begin<Sequence>::type begin;
|
||||
typedef typename result_of::end<Sequence>::type end;
|
||||
for_each_unrolled<result_of::distance<begin, end>::type::value>::call(fusion::begin(seq), f);
|
||||
}
|
||||
|
||||
template <typename Sequence, typename F>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline void
|
||||
for_each(Sequence& seq, F const& f, mpl::false_) // unsegmented implementation
|
||||
{
|
||||
detail::for_each_dispatch(seq, f, typename traits::category_of<Sequence>::type());
|
||||
}
|
||||
}}}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user