Initial Commit
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
// Copyright 2005 Daniel Wallin.
|
||||
// Copyright 2005 Joel de Guzman.
|
||||
//
|
||||
// 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)
|
||||
//
|
||||
// Modeled after range_ex, Copyright 2004 Eric Niebler
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// is_std_set.hpp
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
#ifndef BOOST_PHOENIX_IS_STD_SET_EN_16_12_2004
|
||||
#define BOOST_PHOENIX_IS_STD_SET_EN_16_12_2004
|
||||
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/detail/container_fwd.hpp>
|
||||
|
||||
namespace boost
|
||||
{
|
||||
template<class T>
|
||||
struct is_std_set
|
||||
: boost::mpl::false_
|
||||
{};
|
||||
|
||||
template<
|
||||
class Kty
|
||||
, class Pr
|
||||
, class Alloc
|
||||
>
|
||||
struct is_std_set< ::std::set<Kty,Pr,Alloc> >
|
||||
: boost::mpl::true_
|
||||
{};
|
||||
|
||||
template<class T>
|
||||
struct is_std_multiset
|
||||
: boost::mpl::false_
|
||||
{};
|
||||
|
||||
template<
|
||||
class Kty
|
||||
, class Pr
|
||||
, class Alloc
|
||||
>
|
||||
struct is_std_multiset< ::std::multiset<Kty,Pr,Alloc> >
|
||||
: boost::mpl::true_
|
||||
{};
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,125 @@
|
||||
// Copyright David Abrahams 2004. 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)
|
||||
#ifndef IS_INCREMENTABLE_DWA200415_HPP
|
||||
# define IS_INCREMENTABLE_DWA200415_HPP
|
||||
|
||||
# include <boost/type_traits/integral_constant.hpp>
|
||||
# include <boost/type_traits/remove_cv.hpp>
|
||||
# include <boost/mpl/aux_/lambda_support.hpp>
|
||||
# include <boost/mpl/bool.hpp>
|
||||
# include <boost/detail/workaround.hpp>
|
||||
|
||||
namespace boost { namespace detail {
|
||||
|
||||
// is_incrementable<T> metafunction
|
||||
//
|
||||
// Requires: Given x of type T&, if the expression ++x is well-formed
|
||||
// it must have complete type; otherwise, it must neither be ambiguous
|
||||
// nor violate access.
|
||||
|
||||
// This namespace ensures that ADL doesn't mess things up.
|
||||
namespace is_incrementable_
|
||||
{
|
||||
// a type returned from operator++ when no increment is found in the
|
||||
// type's own namespace
|
||||
struct tag {};
|
||||
|
||||
// any soaks up implicit conversions and makes the following
|
||||
// operator++ less-preferred than any other such operator that
|
||||
// might be found via ADL.
|
||||
struct any { template <class T> any(T const&); };
|
||||
|
||||
// This is a last-resort operator++ for when none other is found
|
||||
# if BOOST_WORKAROUND(__GNUC__, == 4) && __GNUC_MINOR__ == 0 && __GNUC_PATCHLEVEL__ == 2
|
||||
|
||||
}
|
||||
|
||||
namespace is_incrementable_2
|
||||
{
|
||||
is_incrementable_::tag operator++(is_incrementable_::any const&);
|
||||
is_incrementable_::tag operator++(is_incrementable_::any const&,int);
|
||||
}
|
||||
using namespace is_incrementable_2;
|
||||
|
||||
namespace is_incrementable_
|
||||
{
|
||||
|
||||
# else
|
||||
|
||||
tag operator++(any const&);
|
||||
tag operator++(any const&,int);
|
||||
|
||||
# endif
|
||||
|
||||
# if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202))
|
||||
# define BOOST_comma(a,b) (a)
|
||||
# else
|
||||
// In case an operator++ is found that returns void, we'll use ++x,0
|
||||
tag operator,(tag,int);
|
||||
# define BOOST_comma(a,b) (a,b)
|
||||
# endif
|
||||
|
||||
# if defined(BOOST_MSVC)
|
||||
# pragma warning(push)
|
||||
# pragma warning(disable:4913) // Warning about operator,
|
||||
# endif
|
||||
|
||||
// two check overloads help us identify which operator++ was picked
|
||||
char (& check_(tag) )[2];
|
||||
|
||||
template <class T>
|
||||
char check_(T const&);
|
||||
|
||||
|
||||
template <class T>
|
||||
struct impl
|
||||
{
|
||||
static typename boost::remove_cv<T>::type& x;
|
||||
|
||||
BOOST_STATIC_CONSTANT(
|
||||
bool
|
||||
, value = sizeof(is_incrementable_::check_(BOOST_comma(++x,0))) == 1
|
||||
);
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct postfix_impl
|
||||
{
|
||||
static typename boost::remove_cv<T>::type& x;
|
||||
|
||||
BOOST_STATIC_CONSTANT(
|
||||
bool
|
||||
, value = sizeof(is_incrementable_::check_(BOOST_comma(x++,0))) == 1
|
||||
);
|
||||
};
|
||||
|
||||
# if defined(BOOST_MSVC)
|
||||
# pragma warning(pop)
|
||||
# endif
|
||||
|
||||
}
|
||||
|
||||
# undef BOOST_comma
|
||||
|
||||
template<typename T>
|
||||
struct is_incrementable :
|
||||
public boost::integral_constant<bool, boost::detail::is_incrementable_::impl<T>::value>
|
||||
{
|
||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_incrementable,(T))
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct is_postfix_incrementable :
|
||||
public boost::integral_constant<bool, boost::detail::is_incrementable_::postfix_impl<T>::value>
|
||||
{
|
||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_postfix_incrementable,(T))
|
||||
};
|
||||
|
||||
} // namespace detail
|
||||
|
||||
} // namespace boost
|
||||
|
||||
# include <boost/type_traits/detail/bool_trait_undef.hpp>
|
||||
|
||||
#endif // IS_INCREMENTABLE_DWA200415_HPP
|
||||
@@ -0,0 +1,125 @@
|
||||
|
||||
// Copyright Aleksey Gurtovoy 2001-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)
|
||||
//
|
||||
|
||||
// Preprocessed version of "boost/mpl/inherit.hpp" header
|
||||
// -- DO NOT modify by hand!
|
||||
|
||||
namespace boost { namespace mpl {
|
||||
|
||||
template<
|
||||
typename BOOST_MPL_AUX_NA_PARAM(T1)
|
||||
, typename BOOST_MPL_AUX_NA_PARAM(T2)
|
||||
>
|
||||
struct inherit2
|
||||
: T1, T2
|
||||
{
|
||||
typedef inherit2 type;
|
||||
};
|
||||
|
||||
template< typename T1 >
|
||||
struct inherit2< T1,empty_base >
|
||||
{
|
||||
typedef T1 type;
|
||||
BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (T1, empty_base))
|
||||
};
|
||||
|
||||
template< typename T2 >
|
||||
struct inherit2< empty_base,T2 >
|
||||
{
|
||||
typedef T2 type;
|
||||
BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, T2))
|
||||
};
|
||||
|
||||
template<>
|
||||
struct inherit2< empty_base,empty_base >
|
||||
{
|
||||
typedef empty_base type;
|
||||
BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(2, inherit2, (empty_base, empty_base))
|
||||
};
|
||||
|
||||
BOOST_MPL_AUX_NA_SPEC(2, inherit2)
|
||||
|
||||
template<
|
||||
typename T1 = na, typename T2 = na, typename T3 = na
|
||||
>
|
||||
struct inherit3
|
||||
: inherit2<
|
||||
typename inherit2<
|
||||
T1, T2
|
||||
>::type
|
||||
, T3
|
||||
>
|
||||
{
|
||||
};
|
||||
|
||||
BOOST_MPL_AUX_NA_SPEC(3, inherit3)
|
||||
|
||||
template<
|
||||
typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
|
||||
>
|
||||
struct inherit4
|
||||
: inherit2<
|
||||
typename inherit3<
|
||||
T1, T2, T3
|
||||
>::type
|
||||
, T4
|
||||
>
|
||||
{
|
||||
};
|
||||
|
||||
BOOST_MPL_AUX_NA_SPEC(4, inherit4)
|
||||
|
||||
template<
|
||||
typename T1 = na, typename T2 = na, typename T3 = na, typename T4 = na
|
||||
, typename T5 = na
|
||||
>
|
||||
struct inherit5
|
||||
: inherit2<
|
||||
typename inherit4<
|
||||
T1, T2, T3, T4
|
||||
>::type
|
||||
, T5
|
||||
>
|
||||
{
|
||||
};
|
||||
|
||||
BOOST_MPL_AUX_NA_SPEC(5, inherit5)
|
||||
|
||||
/// primary template
|
||||
|
||||
template<
|
||||
typename T1 = empty_base, typename T2 = empty_base
|
||||
, typename T3 = empty_base, typename T4 = empty_base
|
||||
, typename T5 = empty_base
|
||||
>
|
||||
struct inherit
|
||||
: inherit5< T1,T2,T3,T4,T5 >
|
||||
{
|
||||
};
|
||||
|
||||
template<>
|
||||
struct inherit< na,na,na,na,na >
|
||||
{
|
||||
template<
|
||||
|
||||
typename T1 = empty_base, typename T2 = empty_base
|
||||
, typename T3 = empty_base, typename T4 = empty_base
|
||||
, typename T5 = empty_base
|
||||
|
||||
>
|
||||
struct apply
|
||||
: inherit< T1,T2,T3,T4,T5 >
|
||||
{
|
||||
};
|
||||
};
|
||||
|
||||
BOOST_MPL_AUX_NA_SPEC_LAMBDA(5, inherit)
|
||||
BOOST_MPL_AUX_NA_SPEC_ARITY(5, inherit)
|
||||
BOOST_MPL_AUX_NA_SPEC_TEMPLATE_ARITY(5, 5, inherit)
|
||||
}}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
// (C) Copyright Howard Hinnant
|
||||
// (C) Copyright 2011 Vicente J. Botet Escriba
|
||||
// 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).
|
||||
//
|
||||
// This code was adapted by Vicente from Howard Hinnant's experimental work
|
||||
// on chrono i/o to Boost
|
||||
|
||||
#ifndef BOOST_CHRONO_IO_DURATION_STYLE_HPP
|
||||
#define BOOST_CHRONO_IO_DURATION_STYLE_HPP
|
||||
|
||||
#include <boost/detail/scoped_enum_emulation.hpp>
|
||||
|
||||
namespace boost
|
||||
{
|
||||
namespace chrono
|
||||
{
|
||||
/**
|
||||
* Scoped enumeration emulation stating whether the duration I/O style is long or short.
|
||||
* prefix means duration::rep with whatever stream/locale settings are set for it followed by a long name representing the unit
|
||||
* symbol means duration::rep with whatever stream/locale settings are set for it followed by a SI unit abbreviation
|
||||
*/
|
||||
BOOST_SCOPED_ENUM_DECLARE_BEGIN(duration_style)
|
||||
{
|
||||
prefix, symbol
|
||||
}
|
||||
BOOST_SCOPED_ENUM_DECLARE_END(duration_style)
|
||||
|
||||
|
||||
} // chrono
|
||||
|
||||
}
|
||||
|
||||
#endif // header
|
||||
@@ -0,0 +1,36 @@
|
||||
// Boost.Units - A C++ library for zero-overhead dimensional analysis and
|
||||
// unit/quantity manipulation and conversion
|
||||
//
|
||||
// Copyright (C) 2003-2008 Matthias Christian Schabel
|
||||
// Copyright (C) 2008 Steven Watanabe
|
||||
//
|
||||
// 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_UNITS_SI_AREA_HPP
|
||||
#define BOOST_UNITS_SI_AREA_HPP
|
||||
|
||||
#include <boost/units/systems/si/base.hpp>
|
||||
#include <boost/units/physical_dimensions/area.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
namespace units {
|
||||
|
||||
namespace si {
|
||||
|
||||
typedef unit<area_dimension,si::system> area;
|
||||
|
||||
BOOST_UNITS_STATIC_CONSTANT(square_meter,area);
|
||||
BOOST_UNITS_STATIC_CONSTANT(square_meters,area);
|
||||
BOOST_UNITS_STATIC_CONSTANT(square_metre,area);
|
||||
BOOST_UNITS_STATIC_CONSTANT(square_metres,area);
|
||||
|
||||
} // namespace si
|
||||
|
||||
} // namespace units
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif // BOOST_UNITS_SI_AREA_HPP
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright Rene Rivera 2011-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_LANGUAGE_OBJC_H
|
||||
#define BOOST_PREDEF_LANGUAGE_OBJC_H
|
||||
|
||||
#include <boost/predef/version_number.h>
|
||||
#include <boost/predef/make.h>
|
||||
|
||||
/*`
|
||||
[heading `BOOST_LANG_OBJC`]
|
||||
|
||||
[@http://en.wikipedia.org/wiki/Objective-C Objective-C] language.
|
||||
|
||||
[table
|
||||
[[__predef_symbol__] [__predef_version__]]
|
||||
|
||||
[[`__OBJC__`] [__predef_detection__]]
|
||||
]
|
||||
*/
|
||||
|
||||
#define BOOST_LANG_OBJC BOOST_VERSION_NUMBER_NOT_AVAILABLE
|
||||
|
||||
#if defined(__OBJC__)
|
||||
# undef BOOST_LANG_OBJC
|
||||
# define BOOST_LANG_OBJC BOOST_VERSION_NUMBER_AVAILABLE
|
||||
#endif
|
||||
|
||||
#if BOOST_LANG_OBJC
|
||||
# define BOOST_LANG_OBJC_AVAILABLE
|
||||
#endif
|
||||
|
||||
#define BOOST_LANG_OBJC_NAME "Objective-C"
|
||||
|
||||
#endif
|
||||
|
||||
#include <boost/predef/detail/test.h>
|
||||
BOOST_PREDEF_DECLARE_TEST(BOOST_LANG_OBJC,BOOST_LANG_OBJC_NAME)
|
||||
@@ -0,0 +1,54 @@
|
||||
subroutine sync8d(cd0,i0,ctwk,itwk,sync)
|
||||
|
||||
! Compute sync power for a complex, downsampled FT8 signal.
|
||||
|
||||
parameter(NP2=2812,NDOWN=60)
|
||||
complex cd0(3125)
|
||||
complex csync(0:6,32)
|
||||
complex csync2(32)
|
||||
complex ctwk(32)
|
||||
complex z1,z2,z3
|
||||
logical first
|
||||
integer icos7(0:6)
|
||||
data icos7/2,5,6,0,4,1,3/
|
||||
data first/.true./
|
||||
save first,twopi,fs2,dt2,taus,baud,csync
|
||||
|
||||
p(z1)=real(z1)**2 + aimag(z1)**2 !Statement function for power
|
||||
|
||||
! Set some constants and compute the csync array.
|
||||
if( first ) then
|
||||
twopi=8.0*atan(1.0)
|
||||
fs2=12000.0/NDOWN !Sample rate after downsampling
|
||||
dt2=1/fs2 !Corresponding sample interval
|
||||
taus=32*dt2 !Symbol duration
|
||||
baud=1.0/taus !Keying rate
|
||||
do i=0,6
|
||||
phi=0.0
|
||||
dphi=twopi*icos7(i)*baud*dt2
|
||||
do j=1,32
|
||||
csync(i,j)=cmplx(cos(phi),sin(phi)) !Waveform for 7x7 Costas array
|
||||
phi=mod(phi+dphi,twopi)
|
||||
enddo
|
||||
enddo
|
||||
first=.false.
|
||||
endif
|
||||
|
||||
sync=0
|
||||
do i=0,6 !Sum over 7 Costas frequencies and
|
||||
i1=i0+i*32 !three Costas arrays
|
||||
i2=i1+36*32
|
||||
i3=i1+72*32
|
||||
csync2=csync(i,1:32)
|
||||
if(itwk.eq.1) csync2=ctwk*csync2 !Tweak the frequency
|
||||
z1=0.
|
||||
z2=0.
|
||||
z3=0.
|
||||
if(i1.ge.1 .and. i1+31.le.NP2) z1=sum(cd0(i1:i1+31)*conjg(csync2))
|
||||
if(i2.ge.1 .and. i2+31.le.NP2) z2=sum(cd0(i2:i2+31)*conjg(csync2))
|
||||
if(i3.ge.1 .and. i3+31.le.NP2) z3=sum(cd0(i3:i3+31)*conjg(csync2))
|
||||
sync = sync + p(z1) + p(z2) + p(z3)
|
||||
enddo
|
||||
|
||||
return
|
||||
end subroutine sync8d
|
||||
@@ -0,0 +1,76 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 1998-2003 Joel de Guzman
|
||||
Copyright (c) 2001 Daniel Nuffer
|
||||
Copyright (c) 2002 Hartmut Kaiser
|
||||
http://spirit.sourceforge.net/
|
||||
|
||||
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_SPIRIT_SEQUENTIAL_AND_HPP)
|
||||
#define BOOST_SPIRIT_SEQUENTIAL_AND_HPP
|
||||
|
||||
#include <boost/spirit/home/classic/namespace.hpp>
|
||||
#include <boost/spirit/home/classic/core/parser.hpp>
|
||||
#include <boost/spirit/home/classic/core/primitives/primitives.hpp>
|
||||
#include <boost/spirit/home/classic/core/composite/composite.hpp>
|
||||
#include <boost/spirit/home/classic/meta/as_parser.hpp>
|
||||
|
||||
namespace boost { namespace spirit {
|
||||
|
||||
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// sequential-and operators
|
||||
//
|
||||
// Handles expressions of the form:
|
||||
//
|
||||
// a && b
|
||||
//
|
||||
// Same as a >> b.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename A, typename B>
|
||||
sequence<A, B>
|
||||
operator&&(parser<A> const& a, parser<B> const& b);
|
||||
|
||||
template <typename A>
|
||||
sequence<A, chlit<char> >
|
||||
operator&&(parser<A> const& a, char b);
|
||||
|
||||
template <typename B>
|
||||
sequence<chlit<char>, B>
|
||||
operator&&(char a, parser<B> const& b);
|
||||
|
||||
template <typename A>
|
||||
sequence<A, strlit<char const*> >
|
||||
operator&&(parser<A> const& a, char const* b);
|
||||
|
||||
template <typename B>
|
||||
sequence<strlit<char const*>, B>
|
||||
operator&&(char const* a, parser<B> const& b);
|
||||
|
||||
template <typename A>
|
||||
sequence<A, chlit<wchar_t> >
|
||||
operator&&(parser<A> const& a, wchar_t b);
|
||||
|
||||
template <typename B>
|
||||
sequence<chlit<wchar_t>, B>
|
||||
operator&&(wchar_t a, parser<B> const& b);
|
||||
|
||||
template <typename A>
|
||||
sequence<A, strlit<wchar_t const*> >
|
||||
operator&&(parser<A> const& a, wchar_t const* b);
|
||||
|
||||
template <typename B>
|
||||
sequence<strlit<wchar_t const*>, B>
|
||||
operator&&(wchar_t const* a, parser<B> const& b);
|
||||
|
||||
BOOST_SPIRIT_CLASSIC_NAMESPACE_END
|
||||
|
||||
}} // namespace BOOST_SPIRIT_CLASSIC_NS
|
||||
|
||||
#endif
|
||||
|
||||
#include <boost/spirit/home/classic/core/composite/impl/sequential_and.ipp>
|
||||
@@ -0,0 +1,96 @@
|
||||
//---------------------------------------------------------------------------//
|
||||
// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0
|
||||
// See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt
|
||||
//
|
||||
// See http://boostorg.github.com/compute for more information.
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
#ifndef BOOST_COMPUTE_ALGORITHM_EXCLUSIVE_SCAN_HPP
|
||||
#define BOOST_COMPUTE_ALGORITHM_EXCLUSIVE_SCAN_HPP
|
||||
|
||||
#include <boost/compute/functional.hpp>
|
||||
#include <boost/compute/system.hpp>
|
||||
#include <boost/compute/command_queue.hpp>
|
||||
#include <boost/compute/algorithm/detail/scan.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace compute {
|
||||
|
||||
/// Performs an exclusive scan of the elements in the range [\p first, \p last)
|
||||
/// and stores the results in the range beginning at \p result.
|
||||
///
|
||||
/// Each element in the output is assigned to the sum of all the previous
|
||||
/// values in the input.
|
||||
///
|
||||
/// \param first first element in the range to scan
|
||||
/// \param last last element in the range to scan
|
||||
/// \param result first element in the result range
|
||||
/// \param init value used to initialize the scan sequence
|
||||
/// \param binary_op associative binary operator
|
||||
/// \param queue command queue to perform the operation
|
||||
///
|
||||
/// \return \c OutputIterator to the end of the result range
|
||||
///
|
||||
/// The default operation is to add the elements up.
|
||||
///
|
||||
/// \snippet test/test_scan.cpp exclusive_scan_int
|
||||
///
|
||||
/// But different associative operation can be specified as \p binary_op
|
||||
/// instead (e.g., multiplication, maximum, minimum). Also value used to
|
||||
/// initialized the scan sequence can be specified.
|
||||
///
|
||||
/// \snippet test/test_scan.cpp exclusive_scan_int_multiplies
|
||||
///
|
||||
/// \see inclusive_scan()
|
||||
template<class InputIterator, class OutputIterator, class T, class BinaryOperator>
|
||||
inline OutputIterator
|
||||
exclusive_scan(InputIterator first,
|
||||
InputIterator last,
|
||||
OutputIterator result,
|
||||
T init,
|
||||
BinaryOperator binary_op,
|
||||
command_queue &queue = system::default_queue())
|
||||
{
|
||||
return detail::scan(first, last, result, true, init, binary_op, queue);
|
||||
}
|
||||
|
||||
/// \overload
|
||||
template<class InputIterator, class OutputIterator, class T>
|
||||
inline OutputIterator
|
||||
exclusive_scan(InputIterator first,
|
||||
InputIterator last,
|
||||
OutputIterator result,
|
||||
T init,
|
||||
command_queue &queue = system::default_queue())
|
||||
{
|
||||
typedef typename
|
||||
std::iterator_traits<OutputIterator>::value_type output_type;
|
||||
|
||||
return detail::scan(first, last, result, true,
|
||||
init, boost::compute::plus<output_type>(),
|
||||
queue);
|
||||
}
|
||||
|
||||
/// \overload
|
||||
template<class InputIterator, class OutputIterator>
|
||||
inline OutputIterator
|
||||
exclusive_scan(InputIterator first,
|
||||
InputIterator last,
|
||||
OutputIterator result,
|
||||
command_queue &queue = system::default_queue())
|
||||
{
|
||||
typedef typename
|
||||
std::iterator_traits<OutputIterator>::value_type output_type;
|
||||
|
||||
return detail::scan(first, last, result, true,
|
||||
output_type(0), boost::compute::plus<output_type>(),
|
||||
queue);
|
||||
}
|
||||
|
||||
} // end compute namespace
|
||||
} // end boost namespace
|
||||
|
||||
#endif // BOOST_COMPUTE_ALGORITHM_EXCLUSIVE_SCAN_HPP
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,876 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2006 Dan Marsden
|
||||
|
||||
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)
|
||||
|
||||
This is an auto-generated file. Do not edit!
|
||||
==============================================================================*/
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct void_;
|
||||
namespace result_of
|
||||
{
|
||||
template<typename T0 = fusion::void_ , typename T1 = fusion::void_ , typename T2 = fusion::void_ , typename T3 = fusion::void_ , typename T4 = fusion::void_ , typename T5 = fusion::void_ , typename T6 = fusion::void_ , typename T7 = fusion::void_ , typename T8 = fusion::void_ , typename T9 = fusion::void_ , typename T10 = fusion::void_ , typename T11 = fusion::void_ , typename T12 = fusion::void_ , typename T13 = fusion::void_ , typename T14 = fusion::void_ , typename T15 = fusion::void_ , typename T16 = fusion::void_ , typename T17 = fusion::void_ , typename T18 = fusion::void_ , typename T19 = fusion::void_ , typename T20 = fusion::void_ , typename T21 = fusion::void_ , typename T22 = fusion::void_ , typename T23 = fusion::void_ , typename T24 = fusion::void_ , typename T25 = fusion::void_ , typename T26 = fusion::void_ , typename T27 = fusion::void_ , typename T28 = fusion::void_ , typename T29 = fusion::void_ , typename T30 = fusion::void_ , typename T31 = fusion::void_ , typename T32 = fusion::void_ , typename T33 = fusion::void_ , typename T34 = fusion::void_ , typename T35 = fusion::void_ , typename T36 = fusion::void_ , typename T37 = fusion::void_ , typename T38 = fusion::void_ , typename T39 = fusion::void_ , typename T40 = fusion::void_>
|
||||
struct zip;
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 >
|
||||
struct zip< T0 , T1
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1>::type
|
||||
zip(T0 const& t0 , T1 const& t1)
|
||||
{
|
||||
fusion::vector<const T0& , const T1&> seqs(
|
||||
t0 , t1);
|
||||
return typename result_of::zip<const T0 , const T1>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 , typename T2 >
|
||||
struct zip< T0 , T1 , T2
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1 , typename T2>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2&> seqs(
|
||||
t0 , t1 , t2);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 , typename T2 , typename T3 >
|
||||
struct zip< T0 , T1 , T2 , T3
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1 , typename T2 , typename T3>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3&> seqs(
|
||||
t0 , t1 , t2 , t3);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 , T10 , T11 , T12 , T13 , T14 , T15 , T16 , T17 , T18 , T19 , T20 , T21 , T22 , T23 , T24 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24&> seqs(
|
||||
t0 , t1 , t2 , t3 , t4 , t5 , t6 , t7 , t8 , t9 , t10 , t11 , t12 , t13 , t14 , t15 , t16 , t17 , t18 , t19 , t20 , t21 , t22 , t23 , t24);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , 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
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25&> seqs(
|
||||
t0 , 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);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , 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
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26&> seqs(
|
||||
t0 , 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);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , 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
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27&> seqs(
|
||||
t0 , 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);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , 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
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28&> seqs(
|
||||
t0 , 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);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 >
|
||||
struct zip< T0 , 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
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29&> seqs(
|
||||
t0 , 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);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 T30 >
|
||||
struct zip< T0 , 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 , T30
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 , T30 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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 T30>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29& , const T30&> seqs(
|
||||
t0 , 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 , t30);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 T30 , typename T31 >
|
||||
struct zip< T0 , 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 , T30 , T31
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 , T30 , T31 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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 T30 , typename T31>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29& , const T30& , const T31&> seqs(
|
||||
t0 , 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 , t30 , t31);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 T30 , typename T31 , typename T32 >
|
||||
struct zip< T0 , 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 , T30 , T31 , T32
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 , T30 , T31 , T32 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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 T30 , typename T31 , typename T32>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29& , const T30& , const T31& , const T32&> seqs(
|
||||
t0 , 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 , t30 , t31 , t32);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 T30 , typename T31 , typename T32 , typename T33 >
|
||||
struct zip< T0 , 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 , T30 , T31 , T32 , T33
|
||||
, void_ , void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 , T30 , T31 , T32 , T33 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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 T30 , typename T31 , typename T32 , typename T33>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29& , const T30& , const T31& , const T32& , const T33&> seqs(
|
||||
t0 , 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 , t30 , t31 , t32 , t33);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 T30 , typename T31 , typename T32 , typename T33 , typename T34 >
|
||||
struct zip< T0 , 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 , T30 , T31 , T32 , T33 , T34
|
||||
, void_ , void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 , T30 , T31 , T32 , T33 , T34 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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 T30 , typename T31 , typename T32 , typename T33 , typename T34>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29& , const T30& , const T31& , const T32& , const T33& , const T34&> seqs(
|
||||
t0 , 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 , t30 , t31 , t32 , t33 , t34);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 >
|
||||
struct zip< T0 , 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 , T30 , T31 , T32 , T33 , T34 , T35
|
||||
, void_ , void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 , T30 , T31 , T32 , T33 , T34 , T35 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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 T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29& , const T30& , const T31& , const T32& , const T33& , const T34& , const T35&> seqs(
|
||||
t0 , 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 , t30 , t31 , t32 , t33 , t34 , t35);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 >
|
||||
struct zip< T0 , 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 , T30 , T31 , T32 , T33 , T34 , T35 , T36
|
||||
, void_ , void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 , T30 , T31 , T32 , T33 , T34 , T35 , T36 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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 T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29& , const T30& , const T31& , const T32& , const T33& , const T34& , const T35& , const T36&> seqs(
|
||||
t0 , 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 , t30 , t31 , t32 , t33 , t34 , t35 , t36);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 >
|
||||
struct zip< T0 , 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 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37
|
||||
, void_ , void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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 T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29& , const T30& , const T31& , const T32& , const T33& , const T34& , const T35& , const T36& , const T37&> seqs(
|
||||
t0 , 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 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 >
|
||||
struct zip< T0 , 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 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38
|
||||
, void_ , void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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 T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29& , const T30& , const T31& , const T32& , const T33& , const T34& , const T35& , const T36& , const T37& , const T38&> seqs(
|
||||
t0 , 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 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38>::type(
|
||||
seqs);
|
||||
}
|
||||
namespace result_of
|
||||
{
|
||||
template< 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 T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 >
|
||||
struct zip< T0 , 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 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39
|
||||
, void_
|
||||
>
|
||||
{
|
||||
typedef mpl::vector< T0 , 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 , T30 , T31 , T32 , T33 , T34 , T35 , T36 , T37 , T38 , T39 > sequences;
|
||||
typedef typename mpl::transform<sequences, add_reference<mpl::_> >::type ref_params;
|
||||
typedef zip_view<typename result_of::as_vector<ref_params>::type> type;
|
||||
};
|
||||
}
|
||||
template<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 T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39>::type
|
||||
zip(T0 const& t0 , T1 const& t1 , T2 const& t2 , T3 const& t3 , T4 const& t4 , T5 const& t5 , T6 const& t6 , T7 const& t7 , T8 const& t8 , T9 const& t9 , T10 const& t10 , T11 const& t11 , T12 const& t12 , T13 const& t13 , T14 const& t14 , T15 const& t15 , T16 const& t16 , T17 const& t17 , T18 const& t18 , T19 const& t19 , T20 const& t20 , T21 const& t21 , T22 const& t22 , T23 const& t23 , T24 const& t24 , T25 const& t25 , T26 const& t26 , T27 const& t27 , T28 const& t28 , T29 const& t29 , T30 const& t30 , T31 const& t31 , T32 const& t32 , T33 const& t33 , T34 const& t34 , T35 const& t35 , T36 const& t36 , T37 const& t37 , T38 const& t38 , T39 const& t39)
|
||||
{
|
||||
fusion::vector<const T0& , const T1& , const T2& , const T3& , const T4& , const T5& , const T6& , const T7& , const T8& , const T9& , const T10& , const T11& , const T12& , const T13& , const T14& , const T15& , const T16& , const T17& , const T18& , const T19& , const T20& , const T21& , const T22& , const T23& , const T24& , const T25& , const T26& , const T27& , const T28& , const T29& , const T30& , const T31& , const T32& , const T33& , const T34& , const T35& , const T36& , const T37& , const T38& , const T39&> seqs(
|
||||
t0 , 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 , t30 , t31 , t32 , t33 , t34 , t35 , t36 , t37 , t38 , t39);
|
||||
return typename result_of::zip<const T0 , const T1 , const T2 , const T3 , const T4 , const T5 , const T6 , const T7 , const T8 , const T9 , const T10 , const T11 , const T12 , const T13 , const T14 , const T15 , const T16 , const T17 , const T18 , const T19 , const T20 , const T21 , const T22 , const T23 , const T24 , const T25 , const T26 , const T27 , const T28 , const T29 , const T30 , const T31 , const T32 , const T33 , const T34 , const T35 , const T36 , const T37 , const T38 , const T39>::type(
|
||||
seqs);
|
||||
}
|
||||
}}
|
||||
@@ -0,0 +1,23 @@
|
||||
/*=============================================================================
|
||||
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_LIST_LIMITS_07172005_0112)
|
||||
#define FUSION_LIST_LIMITS_07172005_0112
|
||||
|
||||
#include <boost/fusion/support/detail/pp_round.hpp>
|
||||
|
||||
#if !defined(FUSION_MAX_LIST_SIZE)
|
||||
# define FUSION_MAX_LIST_SIZE 10
|
||||
#else
|
||||
# if FUSION_MAX_LIST_SIZE < 3
|
||||
# undef FUSION_MAX_LIST_SIZE
|
||||
# define FUSION_MAX_LIST_SIZE 10
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#define FUSION_MAX_LIST_SIZE_STR BOOST_PP_STRINGIZE(BOOST_FUSION_PP_ROUND_UP(FUSION_MAX_LIST_SIZE))
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
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_COMPILER_METROWERKS_H
|
||||
#define BOOST_PREDEF_COMPILER_METROWERKS_H
|
||||
|
||||
#include <boost/predef/version_number.h>
|
||||
#include <boost/predef/make.h>
|
||||
|
||||
/*`
|
||||
[heading `BOOST_COMP_MWERKS`]
|
||||
|
||||
[@http://en.wikipedia.org/wiki/CodeWarrior Metrowerks CodeWarrior] compiler.
|
||||
Version number available as major, minor, and patch.
|
||||
|
||||
[table
|
||||
[[__predef_symbol__] [__predef_version__]]
|
||||
|
||||
[[`__MWERKS__`] [__predef_detection__]]
|
||||
[[`__CWCC__`] [__predef_detection__]]
|
||||
|
||||
[[`__CWCC__`] [V.R.P]]
|
||||
[[`__MWERKS__`] [V.R.P >= 4.2.0]]
|
||||
[[`__MWERKS__`] [9.R.0]]
|
||||
[[`__MWERKS__`] [8.R.0]]
|
||||
]
|
||||
*/
|
||||
|
||||
#define BOOST_COMP_MWERKS BOOST_VERSION_NUMBER_NOT_AVAILABLE
|
||||
|
||||
#if defined(__MWERKS__) || defined(__CWCC__)
|
||||
# if !defined(BOOST_COMP_MWERKS_DETECTION) && defined(__CWCC__)
|
||||
# define BOOST_COMP_MWERKS_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__CWCC__)
|
||||
# endif
|
||||
# if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x4200)
|
||||
# define BOOST_COMP_MWERKS_DETECTION BOOST_PREDEF_MAKE_0X_VRPP(__MWERKS__)
|
||||
# endif
|
||||
# if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3204) // note the "skip": 04->9.3
|
||||
# define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(9,(__MWERKS__)%100-1,0)
|
||||
# endif
|
||||
# if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3200)
|
||||
# define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(9,(__MWERKS__)%100,0)
|
||||
# endif
|
||||
# if !defined(BOOST_COMP_MWERKS_DETECTION) && (__MWERKS__ >= 0x3000)
|
||||
# define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER(8,(__MWERKS__)%100,0)
|
||||
# endif
|
||||
# if !defined(BOOST_COMP_MWERKS_DETECTION)
|
||||
# define BOOST_COMP_MWERKS_DETECTION BOOST_VERSION_NUMBER_AVAILABLE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef BOOST_COMP_MWERKS_DETECTION
|
||||
# if defined(BOOST_PREDEF_DETAIL_COMP_DETECTED)
|
||||
# define BOOST_COMP_MWERKS_EMULATED BOOST_COMP_MWERKS_DETECTION
|
||||
# else
|
||||
# undef BOOST_COMP_MWERKS
|
||||
# define BOOST_COMP_MWERKS BOOST_COMP_MWERKS_DETECTION
|
||||
# endif
|
||||
# define BOOST_COMP_MWERKS_AVAILABLE
|
||||
# include <boost/predef/detail/comp_detected.h>
|
||||
#endif
|
||||
|
||||
#define BOOST_COMP_MWERKS_NAME "Metrowerks CodeWarrior"
|
||||
|
||||
#endif
|
||||
|
||||
#include <boost/predef/detail/test.h>
|
||||
BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MWERKS,BOOST_COMP_MWERKS_NAME)
|
||||
|
||||
#ifdef BOOST_COMP_MWERKS_EMULATED
|
||||
#include <boost/predef/detail/test.h>
|
||||
BOOST_PREDEF_DECLARE_TEST(BOOST_COMP_MWERKS_EMULATED,BOOST_COMP_MWERKS_NAME)
|
||||
#endif
|
||||
@@ -0,0 +1,56 @@
|
||||
#ifndef BOOST_ARCHIVE_WCSLEN_HPP
|
||||
#define BOOST_ARCHIVE_WCSLEN_HPP
|
||||
|
||||
// MS compatible compilers support #pragma once
|
||||
#if defined(_MSC_VER)
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
|
||||
// wcslen.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 <cstddef> // size_t
|
||||
#include <boost/config.hpp>
|
||||
#if defined(BOOST_NO_STDC_NAMESPACE)
|
||||
namespace std{
|
||||
using ::size_t;
|
||||
} // namespace std
|
||||
#endif
|
||||
|
||||
#ifndef BOOST_NO_CWCHAR
|
||||
|
||||
// a couple of libraries which include wchar_t don't include
|
||||
// wcslen
|
||||
|
||||
#if defined(BOOST_DINKUMWARE_STDLIB) && BOOST_DINKUMWARE_STDLIB < 306 \
|
||||
|| defined(__LIBCOMO__)
|
||||
|
||||
namespace std {
|
||||
inline std::size_t wcslen(const wchar_t * ws)
|
||||
{
|
||||
const wchar_t * eows = ws;
|
||||
while(* eows != 0)
|
||||
++eows;
|
||||
return eows - ws;
|
||||
}
|
||||
} // namespace std
|
||||
|
||||
#else
|
||||
|
||||
#include <cwchar>
|
||||
#ifdef BOOST_NO_STDC_NAMESPACE
|
||||
namespace std{ using ::wcslen; }
|
||||
#endif
|
||||
|
||||
#endif // wcslen
|
||||
|
||||
#endif //BOOST_NO_CWCHAR
|
||||
|
||||
#endif //BOOST_ARCHIVE_WCSLEN_HPP
|
||||
@@ -0,0 +1,122 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gaztanaga 2006-2014
|
||||
//
|
||||
// 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/intrusive for documentation.
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef BOOST_INTRUSIVE_DETAIL_IITERATOR_HPP
|
||||
#define BOOST_INTRUSIVE_DETAIL_IITERATOR_HPP
|
||||
|
||||
#ifndef BOOST_CONFIG_HPP
|
||||
# include <boost/config.hpp>
|
||||
#endif
|
||||
|
||||
#if defined(BOOST_HAS_PRAGMA_ONCE)
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
#include <boost/intrusive/detail/workaround.hpp>
|
||||
#include <boost/intrusive/detail/iterator.hpp>
|
||||
#include <boost/intrusive/pointer_traits.hpp>
|
||||
#include <boost/intrusive/detail/mpl.hpp>
|
||||
#include <boost/intrusive/detail/is_stateful_value_traits.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace intrusive {
|
||||
|
||||
template<class ValueTraits>
|
||||
struct value_traits_pointers
|
||||
{
|
||||
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
|
||||
(boost::intrusive::detail::
|
||||
, ValueTraits, value_traits_ptr
|
||||
, typename boost::intrusive::pointer_traits<typename ValueTraits::node_traits::node_ptr>::template
|
||||
rebind_pointer<ValueTraits>::type) value_traits_ptr;
|
||||
|
||||
typedef typename boost::intrusive::pointer_traits<value_traits_ptr>::template
|
||||
rebind_pointer<ValueTraits const>::type const_value_traits_ptr;
|
||||
};
|
||||
|
||||
template<class ValueTraits, bool IsConst, class Category>
|
||||
struct iiterator
|
||||
{
|
||||
typedef ValueTraits value_traits;
|
||||
typedef typename value_traits::node_traits node_traits;
|
||||
typedef typename node_traits::node node;
|
||||
typedef typename node_traits::node_ptr node_ptr;
|
||||
typedef ::boost::intrusive::pointer_traits<node_ptr> nodepointer_traits_t;
|
||||
typedef typename nodepointer_traits_t::template
|
||||
rebind_pointer<void>::type void_pointer;
|
||||
typedef typename ValueTraits::value_type value_type;
|
||||
typedef typename ValueTraits::pointer nonconst_pointer;
|
||||
typedef typename ValueTraits::const_pointer yesconst_pointer;
|
||||
typedef typename ::boost::intrusive::pointer_traits
|
||||
<nonconst_pointer>::reference nonconst_reference;
|
||||
typedef typename ::boost::intrusive::pointer_traits
|
||||
<yesconst_pointer>::reference yesconst_reference;
|
||||
typedef typename nodepointer_traits_t::difference_type difference_type;
|
||||
typedef typename detail::if_c
|
||||
<IsConst, yesconst_pointer, nonconst_pointer>::type pointer;
|
||||
typedef typename detail::if_c
|
||||
<IsConst, yesconst_reference, nonconst_reference>::type reference;
|
||||
typedef iterator
|
||||
< Category
|
||||
, value_type
|
||||
, difference_type
|
||||
, pointer
|
||||
, reference
|
||||
> iterator_type;
|
||||
typedef typename value_traits_pointers
|
||||
<ValueTraits>::value_traits_ptr value_traits_ptr;
|
||||
typedef typename value_traits_pointers
|
||||
<ValueTraits>::const_value_traits_ptr const_value_traits_ptr;
|
||||
static const bool stateful_value_traits =
|
||||
detail::is_stateful_value_traits<value_traits>::value;
|
||||
};
|
||||
|
||||
template<class NodePtr, class StoredPointer, bool StatefulValueTraits = true>
|
||||
struct iiterator_members
|
||||
{
|
||||
|
||||
BOOST_INTRUSIVE_FORCEINLINE iiterator_members()
|
||||
: nodeptr_()//Value initialization to achieve "null iterators" (N3644)
|
||||
{}
|
||||
|
||||
BOOST_INTRUSIVE_FORCEINLINE iiterator_members(const NodePtr &n_ptr, const StoredPointer &data)
|
||||
: nodeptr_(n_ptr), ptr_(data)
|
||||
{}
|
||||
|
||||
BOOST_INTRUSIVE_FORCEINLINE StoredPointer get_ptr() const
|
||||
{ return ptr_; }
|
||||
|
||||
NodePtr nodeptr_;
|
||||
StoredPointer ptr_;
|
||||
};
|
||||
|
||||
template<class NodePtr, class StoredPointer>
|
||||
struct iiterator_members<NodePtr, StoredPointer, false>
|
||||
{
|
||||
BOOST_INTRUSIVE_FORCEINLINE iiterator_members()
|
||||
: nodeptr_()//Value initialization to achieve "null iterators" (N3644)
|
||||
{}
|
||||
|
||||
BOOST_INTRUSIVE_FORCEINLINE iiterator_members(const NodePtr &n_ptr, const StoredPointer &)
|
||||
: nodeptr_(n_ptr)
|
||||
{}
|
||||
|
||||
BOOST_INTRUSIVE_FORCEINLINE StoredPointer get_ptr() const
|
||||
{ return StoredPointer(); }
|
||||
|
||||
NodePtr nodeptr_;
|
||||
};
|
||||
|
||||
} //namespace intrusive
|
||||
} //namespace boost
|
||||
|
||||
#endif //BOOST_INTRUSIVE_DETAIL_IITERATOR_HPP
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
#ifndef BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED
|
||||
#define BOOST_MPL_NOT_EQUAL_TO_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$
|
||||
|
||||
#define AUX778076_OP_NAME not_equal_to
|
||||
#define AUX778076_OP_TOKEN !=
|
||||
#include <boost/mpl/aux_/comparison_op.hpp>
|
||||
|
||||
#endif // BOOST_MPL_NOT_EQUAL_TO_HPP_INCLUDED
|
||||
@@ -0,0 +1,208 @@
|
||||
//---------------------------------------------------------------------------//
|
||||
// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0
|
||||
// See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt
|
||||
//
|
||||
// See http://boostorg.github.com/compute for more information.
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
#ifndef BOOST_COMPUTE_FUNCTIONAL_LOGICAL_HPP
|
||||
#define BOOST_COMPUTE_FUNCTIONAL_LOGICAL_HPP
|
||||
|
||||
namespace boost {
|
||||
namespace compute {
|
||||
namespace detail {
|
||||
|
||||
template<class Predicate, class Expr>
|
||||
class invoked_unary_negate_function
|
||||
{
|
||||
public:
|
||||
typedef int result_type;
|
||||
|
||||
invoked_unary_negate_function(const Predicate &pred,
|
||||
const Expr &expr)
|
||||
: m_pred(pred),
|
||||
m_expr(expr)
|
||||
{
|
||||
}
|
||||
|
||||
Predicate pred() const
|
||||
{
|
||||
return m_pred;
|
||||
}
|
||||
|
||||
Expr expr() const
|
||||
{
|
||||
return m_expr;
|
||||
}
|
||||
|
||||
private:
|
||||
Predicate m_pred;
|
||||
Expr m_expr;
|
||||
};
|
||||
|
||||
template<class Predicate, class Expr1, class Expr2>
|
||||
class invoked_binary_negate_function
|
||||
{
|
||||
public:
|
||||
typedef int result_type;
|
||||
|
||||
invoked_binary_negate_function(const Predicate &pred,
|
||||
const Expr1 &expr1,
|
||||
const Expr2 &expr2)
|
||||
: m_pred(pred),
|
||||
m_expr1(expr1),
|
||||
m_expr2(expr2)
|
||||
{
|
||||
}
|
||||
|
||||
Predicate pred() const
|
||||
{
|
||||
return m_pred;
|
||||
}
|
||||
|
||||
Expr1 expr1() const
|
||||
{
|
||||
return m_expr1;
|
||||
}
|
||||
|
||||
Expr2 expr2() const
|
||||
{
|
||||
return m_expr2;
|
||||
}
|
||||
|
||||
private:
|
||||
Predicate m_pred;
|
||||
Expr1 m_expr1;
|
||||
Expr2 m_expr2;
|
||||
};
|
||||
|
||||
} // end detail namespace
|
||||
|
||||
/// \internal_
|
||||
template<class Arg, class Result>
|
||||
struct unary_function
|
||||
{
|
||||
typedef Arg argument_type;
|
||||
typedef Result result_type;
|
||||
};
|
||||
|
||||
/// \internal_
|
||||
template<class Arg1, class Arg2, class Result>
|
||||
struct binary_function
|
||||
{
|
||||
typedef Arg1 first_argument_type;
|
||||
typedef Arg2 second_argument_type;
|
||||
typedef Result result_type;
|
||||
};
|
||||
|
||||
/// \internal_
|
||||
template<class Arg1, class Arg2, class Arg3, class Result>
|
||||
struct ternary_function
|
||||
{
|
||||
typedef Arg1 first_argument_type;
|
||||
typedef Arg2 second_argument_type;
|
||||
typedef Arg3 third_argument_type;
|
||||
typedef Result result_type;
|
||||
};
|
||||
|
||||
/// The unary_negate function adaptor negates a unary function.
|
||||
///
|
||||
/// \see not1()
|
||||
template<class Predicate>
|
||||
class unary_negate : public unary_function<void, int>
|
||||
{
|
||||
public:
|
||||
explicit unary_negate(Predicate pred)
|
||||
: m_pred(pred)
|
||||
{
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
template<class Arg>
|
||||
detail::invoked_unary_negate_function<Predicate, Arg>
|
||||
operator()(const Arg &arg) const
|
||||
{
|
||||
return detail::invoked_unary_negate_function<
|
||||
Predicate,
|
||||
Arg
|
||||
>(m_pred, arg);
|
||||
}
|
||||
|
||||
private:
|
||||
Predicate m_pred;
|
||||
};
|
||||
|
||||
/// The binnary_negate function adaptor negates a binary function.
|
||||
///
|
||||
/// \see not2()
|
||||
template<class Predicate>
|
||||
class binary_negate : public binary_function<void, void, int>
|
||||
{
|
||||
public:
|
||||
explicit binary_negate(Predicate pred)
|
||||
: m_pred(pred)
|
||||
{
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
template<class Arg1, class Arg2>
|
||||
detail::invoked_binary_negate_function<Predicate, Arg1, Arg2>
|
||||
operator()(const Arg1 &arg1, const Arg2 &arg2) const
|
||||
{
|
||||
return detail::invoked_binary_negate_function<
|
||||
Predicate,
|
||||
Arg1,
|
||||
Arg2
|
||||
>(m_pred, arg1, arg2);
|
||||
}
|
||||
|
||||
private:
|
||||
Predicate m_pred;
|
||||
};
|
||||
|
||||
/// Returns a unary_negate adaptor around \p predicate.
|
||||
///
|
||||
/// \param predicate the unary function to wrap
|
||||
///
|
||||
/// \return a unary_negate wrapper around \p predicate
|
||||
template<class Predicate>
|
||||
inline unary_negate<Predicate> not1(const Predicate &predicate)
|
||||
{
|
||||
return unary_negate<Predicate>(predicate);
|
||||
}
|
||||
|
||||
/// Returns a binary_negate adaptor around \p predicate.
|
||||
///
|
||||
/// \param predicate the binary function to wrap
|
||||
///
|
||||
/// \return a binary_negate wrapper around \p predicate
|
||||
template<class Predicate>
|
||||
inline binary_negate<Predicate> not2(const Predicate &predicate)
|
||||
{
|
||||
return binary_negate<Predicate>(predicate);
|
||||
}
|
||||
|
||||
/// The logical_not function negates its argument and returns it.
|
||||
///
|
||||
/// \see not1(), not2()
|
||||
template<class T>
|
||||
struct logical_not : public unary_function<T, int>
|
||||
{
|
||||
/// \internal_
|
||||
template<class Expr>
|
||||
detail::invoked_function<int, boost::tuple<Expr> >
|
||||
operator()(const Expr &expr) const
|
||||
{
|
||||
return detail::invoked_function<int, boost::tuple<Expr> >(
|
||||
"!", std::string(), boost::make_tuple(expr)
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
} // end compute namespace
|
||||
} // end boost namespace
|
||||
|
||||
#endif // BOOST_COMPUTE_FUNCTIONAL_LOGICAL_HPP
|
||||
@@ -0,0 +1,41 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2009-2010 Christopher Schmidt
|
||||
|
||||
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_FUSION_ADAPTED_STRUCT_DETAIL_DEREF_IMPL_HPP
|
||||
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_DEREF_IMPL_HPP
|
||||
|
||||
namespace boost { namespace fusion { namespace extension
|
||||
{
|
||||
template <typename>
|
||||
struct deref_impl;
|
||||
|
||||
template <>
|
||||
struct deref_impl<struct_iterator_tag>
|
||||
{
|
||||
template <typename It>
|
||||
struct apply
|
||||
{
|
||||
typedef typename
|
||||
access::struct_member<
|
||||
typename remove_const<typename It::seq_type>::type
|
||||
, It::index::value
|
||||
>::template apply<typename It::seq_type>
|
||||
impl;
|
||||
|
||||
typedef typename impl::type type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(It const& it)
|
||||
{
|
||||
return impl::call(*it.seq);
|
||||
}
|
||||
};
|
||||
};
|
||||
}}}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,53 @@
|
||||
//---------------------------------------------------------------------------//
|
||||
// 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_ALLOCATOR_PINNED_ALLOCATOR_HPP
|
||||
#define BOOST_COMPUTE_ALLOCATOR_PINNED_ALLOCATOR_HPP
|
||||
|
||||
#include <boost/compute/allocator/buffer_allocator.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace compute {
|
||||
|
||||
template<class T>
|
||||
class pinned_allocator : public buffer_allocator<T>
|
||||
{
|
||||
public:
|
||||
explicit pinned_allocator(const context &context)
|
||||
: buffer_allocator<T>(context)
|
||||
{
|
||||
buffer_allocator<T>::set_mem_flags(
|
||||
buffer::read_write | buffer::alloc_host_ptr
|
||||
);
|
||||
}
|
||||
|
||||
pinned_allocator(const pinned_allocator<T> &other)
|
||||
: buffer_allocator<T>(other)
|
||||
{
|
||||
}
|
||||
|
||||
pinned_allocator<T>& operator=(const pinned_allocator<T> &other)
|
||||
{
|
||||
if(this != &other){
|
||||
buffer_allocator<T>::operator=(other);
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
~pinned_allocator()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
} // end compute namespace
|
||||
} // end boost namespace
|
||||
|
||||
#endif // BOOST_COMPUTE_ALLOCATOR_PINNED_ALLOCATOR_HPP
|
||||
@@ -0,0 +1,33 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright 2015 John Maddock. 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_IS_BYTE_CONTAINER_HPP
|
||||
#define BOOST_IS_BYTE_CONTAINER_HPP
|
||||
|
||||
#include <boost/mpl/has_xxx.hpp>
|
||||
#include <boost/type_traits/is_integral.hpp>
|
||||
|
||||
namespace boost{ namespace multiprecision{ namespace detail{
|
||||
|
||||
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_member_value_type, value_type, false);
|
||||
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_member_const_iterator, const_iterator, false);
|
||||
|
||||
template <class C, bool b>
|
||||
struct is_byte_container_imp
|
||||
{
|
||||
static const bool value = boost::is_integral<typename C::value_type>::value && (sizeof(typename C::value_type) == 1);
|
||||
};
|
||||
|
||||
template <class C>
|
||||
struct is_byte_container_imp<C, false> : public boost::false_type {};
|
||||
|
||||
template <class C>
|
||||
struct is_byte_container : public is_byte_container_imp<C, has_member_value_type<C>::value && has_member_const_iterator<C>::value> {};
|
||||
|
||||
|
||||
}}} // namespaces
|
||||
|
||||
#endif // BOOST_IS_BYTE_CONTAINER_HPP
|
||||
|
||||
@@ -0,0 +1,527 @@
|
||||
// Copyright John Maddock 2010.
|
||||
// Copyright Paul A. Bristow 2010.
|
||||
|
||||
// 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)
|
||||
|
||||
#ifndef BOOST_STATS_INVERSE_GAUSSIAN_HPP
|
||||
#define BOOST_STATS_INVERSE_GAUSSIAN_HPP
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(disable: 4512) // assignment operator could not be generated
|
||||
#endif
|
||||
|
||||
// http://en.wikipedia.org/wiki/Normal-inverse_Gaussian_distribution
|
||||
// http://mathworld.wolfram.com/InverseGaussianDistribution.html
|
||||
|
||||
// The normal-inverse Gaussian distribution
|
||||
// also called the Wald distribution (some sources limit this to when mean = 1).
|
||||
|
||||
// It is the continuous probability distribution
|
||||
// that is defined as the normal variance-mean mixture where the mixing density is the
|
||||
// inverse Gaussian distribution. The tails of the distribution decrease more slowly
|
||||
// than the normal distribution. It is therefore suitable to model phenomena
|
||||
// where numerically large values are more probable than is the case for the normal distribution.
|
||||
|
||||
// The Inverse Gaussian distribution was first studied in relationship to Brownian motion.
|
||||
// In 1956 M.C.K. Tweedie used the name 'Inverse Gaussian' because there is an inverse
|
||||
// relationship between the time to cover a unit distance and distance covered in unit time.
|
||||
|
||||
// Examples are returns from financial assets and turbulent wind speeds.
|
||||
// The normal-inverse Gaussian distributions form
|
||||
// a subclass of the generalised hyperbolic distributions.
|
||||
|
||||
// See also
|
||||
|
||||
// http://en.wikipedia.org/wiki/Normal_distribution
|
||||
// http://www.itl.nist.gov/div898/handbook/eda/section3/eda3661.htm
|
||||
// Also:
|
||||
// Weisstein, Eric W. "Normal Distribution."
|
||||
// From MathWorld--A Wolfram Web Resource.
|
||||
// http://mathworld.wolfram.com/NormalDistribution.html
|
||||
|
||||
// http://www.jstatsoft.org/v26/i04/paper General class of inverse Gaussian distributions.
|
||||
// ig package - withdrawn but at http://cran.r-project.org/src/contrib/Archive/ig/
|
||||
|
||||
// http://www.stat.ucl.ac.be/ISdidactique/Rhelp/library/SuppDists/html/inverse_gaussian.html
|
||||
// R package for dinverse_gaussian, ...
|
||||
|
||||
// http://www.statsci.org/s/inverse_gaussian.s and http://www.statsci.org/s/inverse_gaussian.html
|
||||
|
||||
//#include <boost/math/distributions/fwd.hpp>
|
||||
#include <boost/math/special_functions/erf.hpp> // for erf/erfc.
|
||||
#include <boost/math/distributions/complement.hpp>
|
||||
#include <boost/math/distributions/detail/common_error_handling.hpp>
|
||||
#include <boost/math/distributions/normal.hpp>
|
||||
#include <boost/math/distributions/gamma.hpp> // for gamma function
|
||||
// using boost::math::gamma_p;
|
||||
|
||||
#include <boost/math/tools/tuple.hpp>
|
||||
//using std::tr1::tuple;
|
||||
//using std::tr1::make_tuple;
|
||||
#include <boost/math/tools/roots.hpp>
|
||||
//using boost::math::tools::newton_raphson_iterate;
|
||||
|
||||
#include <utility>
|
||||
|
||||
namespace boost{ namespace math{
|
||||
|
||||
template <class RealType = double, class Policy = policies::policy<> >
|
||||
class inverse_gaussian_distribution
|
||||
{
|
||||
public:
|
||||
typedef RealType value_type;
|
||||
typedef Policy policy_type;
|
||||
|
||||
inverse_gaussian_distribution(RealType l_mean = 1, RealType l_scale = 1)
|
||||
: m_mean(l_mean), m_scale(l_scale)
|
||||
{ // Default is a 1,1 inverse_gaussian distribution.
|
||||
static const char* function = "boost::math::inverse_gaussian_distribution<%1%>::inverse_gaussian_distribution";
|
||||
|
||||
RealType result;
|
||||
detail::check_scale(function, l_scale, &result, Policy());
|
||||
detail::check_location(function, l_mean, &result, Policy());
|
||||
detail::check_x_gt0(function, l_mean, &result, Policy());
|
||||
}
|
||||
|
||||
RealType mean()const
|
||||
{ // alias for location.
|
||||
return m_mean; // aka mu
|
||||
}
|
||||
|
||||
// Synonyms, provided to allow generic use of find_location and find_scale.
|
||||
RealType location()const
|
||||
{ // location, aka mu.
|
||||
return m_mean;
|
||||
}
|
||||
RealType scale()const
|
||||
{ // scale, aka lambda.
|
||||
return m_scale;
|
||||
}
|
||||
|
||||
RealType shape()const
|
||||
{ // shape, aka phi = lambda/mu.
|
||||
return m_scale / m_mean;
|
||||
}
|
||||
|
||||
private:
|
||||
//
|
||||
// Data members:
|
||||
//
|
||||
RealType m_mean; // distribution mean or location, aka mu.
|
||||
RealType m_scale; // distribution standard deviation or scale, aka lambda.
|
||||
}; // class normal_distribution
|
||||
|
||||
typedef inverse_gaussian_distribution<double> inverse_gaussian;
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline const std::pair<RealType, RealType> range(const inverse_gaussian_distribution<RealType, Policy>& /*dist*/)
|
||||
{ // Range of permissible values for random variable x, zero to max.
|
||||
using boost::math::tools::max_value;
|
||||
return std::pair<RealType, RealType>(static_cast<RealType>(0.), max_value<RealType>()); // - to + max value.
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline const std::pair<RealType, RealType> support(const inverse_gaussian_distribution<RealType, Policy>& /*dist*/)
|
||||
{ // Range of supported values for random variable x, zero to max.
|
||||
// This is range where cdf rises from 0 to 1, and outside it, the pdf is zero.
|
||||
using boost::math::tools::max_value;
|
||||
return std::pair<RealType, RealType>(static_cast<RealType>(0.), max_value<RealType>()); // - to + max value.
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType pdf(const inverse_gaussian_distribution<RealType, Policy>& dist, const RealType& x)
|
||||
{ // Probability Density Function
|
||||
BOOST_MATH_STD_USING // for ADL of std functions
|
||||
|
||||
RealType scale = dist.scale();
|
||||
RealType mean = dist.mean();
|
||||
RealType result = 0;
|
||||
static const char* function = "boost::math::pdf(const inverse_gaussian_distribution<%1%>&, %1%)";
|
||||
if(false == detail::check_scale(function, scale, &result, Policy()))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if(false == detail::check_location(function, mean, &result, Policy()))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if(false == detail::check_x_gt0(function, mean, &result, Policy()))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if(false == detail::check_positive_x(function, x, &result, Policy()))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
if (x == 0)
|
||||
{
|
||||
return 0; // Convenient, even if not defined mathematically.
|
||||
}
|
||||
|
||||
result =
|
||||
sqrt(scale / (constants::two_pi<RealType>() * x * x * x))
|
||||
* exp(-scale * (x - mean) * (x - mean) / (2 * x * mean * mean));
|
||||
return result;
|
||||
} // pdf
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType cdf(const inverse_gaussian_distribution<RealType, Policy>& dist, const RealType& x)
|
||||
{ // Cumulative Density Function.
|
||||
BOOST_MATH_STD_USING // for ADL of std functions.
|
||||
|
||||
RealType scale = dist.scale();
|
||||
RealType mean = dist.mean();
|
||||
static const char* function = "boost::math::cdf(const inverse_gaussian_distribution<%1%>&, %1%)";
|
||||
RealType result = 0;
|
||||
if(false == detail::check_scale(function, scale, &result, Policy()))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if(false == detail::check_location(function, mean, &result, Policy()))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if (false == detail::check_x_gt0(function, mean, &result, Policy()))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if(false == detail::check_positive_x(function, x, &result, Policy()))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
if (x == 0)
|
||||
{
|
||||
return 0; // Convenient, even if not defined mathematically.
|
||||
}
|
||||
// Problem with this formula for large scale > 1000 or small x,
|
||||
//result = 0.5 * (erf(sqrt(scale / x) * ((x / mean) - 1) / constants::root_two<RealType>(), Policy()) + 1)
|
||||
// + exp(2 * scale / mean) / 2
|
||||
// * (1 - erf(sqrt(scale / x) * (x / mean + 1) / constants::root_two<RealType>(), Policy()));
|
||||
// so use normal distribution version:
|
||||
// Wikipedia CDF equation http://en.wikipedia.org/wiki/Inverse_Gaussian_distribution.
|
||||
|
||||
normal_distribution<RealType> n01;
|
||||
|
||||
RealType n0 = sqrt(scale / x);
|
||||
n0 *= ((x / mean) -1);
|
||||
RealType n1 = cdf(n01, n0);
|
||||
RealType expfactor = exp(2 * scale / mean);
|
||||
RealType n3 = - sqrt(scale / x);
|
||||
n3 *= (x / mean) + 1;
|
||||
RealType n4 = cdf(n01, n3);
|
||||
result = n1 + expfactor * n4;
|
||||
return result;
|
||||
} // cdf
|
||||
|
||||
template <class RealType, class Policy>
|
||||
struct inverse_gaussian_quantile_functor
|
||||
{
|
||||
|
||||
inverse_gaussian_quantile_functor(const boost::math::inverse_gaussian_distribution<RealType, Policy> dist, RealType const& p)
|
||||
: distribution(dist), prob(p)
|
||||
{
|
||||
}
|
||||
boost::math::tuple<RealType, RealType> operator()(RealType const& x)
|
||||
{
|
||||
RealType c = cdf(distribution, x);
|
||||
RealType fx = c - prob; // Difference cdf - value - to minimize.
|
||||
RealType dx = pdf(distribution, x); // pdf is 1st derivative.
|
||||
// return both function evaluation difference f(x) and 1st derivative f'(x).
|
||||
return boost::math::make_tuple(fx, dx);
|
||||
}
|
||||
private:
|
||||
const boost::math::inverse_gaussian_distribution<RealType, Policy> distribution;
|
||||
RealType prob;
|
||||
};
|
||||
|
||||
template <class RealType, class Policy>
|
||||
struct inverse_gaussian_quantile_complement_functor
|
||||
{
|
||||
inverse_gaussian_quantile_complement_functor(const boost::math::inverse_gaussian_distribution<RealType, Policy> dist, RealType const& p)
|
||||
: distribution(dist), prob(p)
|
||||
{
|
||||
}
|
||||
boost::math::tuple<RealType, RealType> operator()(RealType const& x)
|
||||
{
|
||||
RealType c = cdf(complement(distribution, x));
|
||||
RealType fx = c - prob; // Difference cdf - value - to minimize.
|
||||
RealType dx = -pdf(distribution, x); // pdf is 1st derivative.
|
||||
// return both function evaluation difference f(x) and 1st derivative f'(x).
|
||||
//return std::tr1::make_tuple(fx, dx); if available.
|
||||
return boost::math::make_tuple(fx, dx);
|
||||
}
|
||||
private:
|
||||
const boost::math::inverse_gaussian_distribution<RealType, Policy> distribution;
|
||||
RealType prob;
|
||||
};
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <class RealType>
|
||||
inline RealType guess_ig(RealType p, RealType mu = 1, RealType lambda = 1)
|
||||
{ // guess at random variate value x for inverse gaussian quantile.
|
||||
BOOST_MATH_STD_USING
|
||||
using boost::math::policies::policy;
|
||||
// Error type.
|
||||
using boost::math::policies::overflow_error;
|
||||
// Action.
|
||||
using boost::math::policies::ignore_error;
|
||||
|
||||
typedef policy<
|
||||
overflow_error<ignore_error> // Ignore overflow (return infinity)
|
||||
> no_overthrow_policy;
|
||||
|
||||
RealType x; // result is guess at random variate value x.
|
||||
RealType phi = lambda / mu;
|
||||
if (phi > 2.)
|
||||
{ // Big phi, so starting to look like normal Gaussian distribution.
|
||||
// x=(qnorm(p,0,1,true,false) - 0.5 * sqrt(mu/lambda)) / sqrt(lambda/mu);
|
||||
// Whitmore, G.A. and Yalovsky, M.
|
||||
// A normalising logarithmic transformation for inverse Gaussian random variables,
|
||||
// Technometrics 20-2, 207-208 (1978), but using expression from
|
||||
// V Seshadri, Inverse Gaussian distribution (1998) ISBN 0387 98618 9, page 6.
|
||||
|
||||
normal_distribution<RealType, no_overthrow_policy> n01;
|
||||
x = mu * exp(quantile(n01, p) / sqrt(phi) - 1/(2 * phi));
|
||||
}
|
||||
else
|
||||
{ // phi < 2 so much less symmetrical with long tail,
|
||||
// so use gamma distribution as an approximation.
|
||||
using boost::math::gamma_distribution;
|
||||
|
||||
// Define the distribution, using gamma_nooverflow:
|
||||
typedef gamma_distribution<RealType, no_overthrow_policy> gamma_nooverflow;
|
||||
|
||||
gamma_nooverflow g(static_cast<RealType>(0.5), static_cast<RealType>(1.));
|
||||
|
||||
// gamma_nooverflow g(static_cast<RealType>(0.5), static_cast<RealType>(1.));
|
||||
// R qgamma(0.2, 0.5, 1) 0.0320923
|
||||
RealType qg = quantile(complement(g, p));
|
||||
//RealType qg1 = qgamma(1.- p, 0.5, 1.0, true, false);
|
||||
x = lambda / (qg * 2);
|
||||
//
|
||||
if (x > mu/2) // x > mu /2?
|
||||
{ // x too large for the gamma approximation to work well.
|
||||
//x = qgamma(p, 0.5, 1.0); // qgamma(0.270614, 0.5, 1) = 0.05983807
|
||||
RealType q = quantile(g, p);
|
||||
// x = mu * exp(q * static_cast<RealType>(0.1)); // Said to improve at high p
|
||||
// x = mu * x; // Improves at high p?
|
||||
x = mu * exp(q / sqrt(phi) - 1/(2 * phi));
|
||||
}
|
||||
}
|
||||
return x;
|
||||
} // guess_ig
|
||||
} // namespace detail
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType quantile(const inverse_gaussian_distribution<RealType, Policy>& dist, const RealType& p)
|
||||
{
|
||||
BOOST_MATH_STD_USING // for ADL of std functions.
|
||||
// No closed form exists so guess and use Newton Raphson iteration.
|
||||
|
||||
RealType mean = dist.mean();
|
||||
RealType scale = dist.scale();
|
||||
static const char* function = "boost::math::quantile(const inverse_gaussian_distribution<%1%>&, %1%)";
|
||||
|
||||
RealType result = 0;
|
||||
if(false == detail::check_scale(function, scale, &result, Policy()))
|
||||
return result;
|
||||
if(false == detail::check_location(function, mean, &result, Policy()))
|
||||
return result;
|
||||
if (false == detail::check_x_gt0(function, mean, &result, Policy()))
|
||||
return result;
|
||||
if(false == detail::check_probability(function, p, &result, Policy()))
|
||||
return result;
|
||||
if (p == 0)
|
||||
{
|
||||
return 0; // Convenient, even if not defined mathematically?
|
||||
}
|
||||
if (p == 1)
|
||||
{ // overflow
|
||||
result = policies::raise_overflow_error<RealType>(function,
|
||||
"probability parameter is 1, but must be < 1!", Policy());
|
||||
return result; // std::numeric_limits<RealType>::infinity();
|
||||
}
|
||||
|
||||
RealType guess = detail::guess_ig(p, dist.mean(), dist.scale());
|
||||
using boost::math::tools::max_value;
|
||||
|
||||
RealType min = 0.; // Minimum possible value is bottom of range of distribution.
|
||||
RealType max = max_value<RealType>();// Maximum possible value is top of range.
|
||||
// int digits = std::numeric_limits<RealType>::digits; // Maximum possible binary digits accuracy for type T.
|
||||
// digits used to control how accurate to try to make the result.
|
||||
// To allow user to control accuracy versus speed,
|
||||
int get_digits = policies::digits<RealType, Policy>();// get digits from policy,
|
||||
boost::uintmax_t m = policies::get_max_root_iterations<Policy>(); // and max iterations.
|
||||
using boost::math::tools::newton_raphson_iterate;
|
||||
result =
|
||||
newton_raphson_iterate(inverse_gaussian_quantile_functor<RealType, Policy>(dist, p), guess, min, max, get_digits, m);
|
||||
return result;
|
||||
} // quantile
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType cdf(const complemented2_type<inverse_gaussian_distribution<RealType, Policy>, RealType>& c)
|
||||
{
|
||||
BOOST_MATH_STD_USING // for ADL of std functions.
|
||||
|
||||
RealType scale = c.dist.scale();
|
||||
RealType mean = c.dist.mean();
|
||||
RealType x = c.param;
|
||||
static const char* function = "boost::math::cdf(const complement(inverse_gaussian_distribution<%1%>&), %1%)";
|
||||
// infinite arguments not supported.
|
||||
//if((boost::math::isinf)(x))
|
||||
//{
|
||||
// if(x < 0) return 1; // cdf complement -infinity is unity.
|
||||
// return 0; // cdf complement +infinity is zero
|
||||
//}
|
||||
// These produce MSVC 4127 warnings, so the above used instead.
|
||||
//if(std::numeric_limits<RealType>::has_infinity && x == std::numeric_limits<RealType>::infinity())
|
||||
//{ // cdf complement +infinity is zero.
|
||||
// return 0;
|
||||
//}
|
||||
//if(std::numeric_limits<RealType>::has_infinity && x == -std::numeric_limits<RealType>::infinity())
|
||||
//{ // cdf complement -infinity is unity.
|
||||
// return 1;
|
||||
//}
|
||||
RealType result = 0;
|
||||
if(false == detail::check_scale(function, scale, &result, Policy()))
|
||||
return result;
|
||||
if(false == detail::check_location(function, mean, &result, Policy()))
|
||||
return result;
|
||||
if (false == detail::check_x_gt0(function, mean, &result, Policy()))
|
||||
return result;
|
||||
if(false == detail::check_positive_x(function, x, &result, Policy()))
|
||||
return result;
|
||||
|
||||
normal_distribution<RealType> n01;
|
||||
RealType n0 = sqrt(scale / x);
|
||||
n0 *= ((x / mean) -1);
|
||||
RealType cdf_1 = cdf(complement(n01, n0));
|
||||
|
||||
RealType expfactor = exp(2 * scale / mean);
|
||||
RealType n3 = - sqrt(scale / x);
|
||||
n3 *= (x / mean) + 1;
|
||||
|
||||
//RealType n5 = +sqrt(scale/x) * ((x /mean) + 1); // note now positive sign.
|
||||
RealType n6 = cdf(complement(n01, +sqrt(scale/x) * ((x /mean) + 1)));
|
||||
// RealType n4 = cdf(n01, n3); // =
|
||||
result = cdf_1 - expfactor * n6;
|
||||
return result;
|
||||
} // cdf complement
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType quantile(const complemented2_type<inverse_gaussian_distribution<RealType, Policy>, RealType>& c)
|
||||
{
|
||||
BOOST_MATH_STD_USING // for ADL of std functions
|
||||
|
||||
RealType scale = c.dist.scale();
|
||||
RealType mean = c.dist.mean();
|
||||
static const char* function = "boost::math::quantile(const complement(inverse_gaussian_distribution<%1%>&), %1%)";
|
||||
RealType result = 0;
|
||||
if(false == detail::check_scale(function, scale, &result, Policy()))
|
||||
return result;
|
||||
if(false == detail::check_location(function, mean, &result, Policy()))
|
||||
return result;
|
||||
if (false == detail::check_x_gt0(function, mean, &result, Policy()))
|
||||
return result;
|
||||
RealType q = c.param;
|
||||
if(false == detail::check_probability(function, q, &result, Policy()))
|
||||
return result;
|
||||
|
||||
RealType guess = detail::guess_ig(q, mean, scale);
|
||||
// Complement.
|
||||
using boost::math::tools::max_value;
|
||||
|
||||
RealType min = 0.; // Minimum possible value is bottom of range of distribution.
|
||||
RealType max = max_value<RealType>();// Maximum possible value is top of range.
|
||||
// int digits = std::numeric_limits<RealType>::digits; // Maximum possible binary digits accuracy for type T.
|
||||
// digits used to control how accurate to try to make the result.
|
||||
int get_digits = policies::digits<RealType, Policy>();
|
||||
boost::uintmax_t m = policies::get_max_root_iterations<Policy>();
|
||||
using boost::math::tools::newton_raphson_iterate;
|
||||
result =
|
||||
newton_raphson_iterate(inverse_gaussian_quantile_complement_functor<RealType, Policy>(c.dist, q), guess, min, max, get_digits, m);
|
||||
return result;
|
||||
} // quantile
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType mean(const inverse_gaussian_distribution<RealType, Policy>& dist)
|
||||
{ // aka mu
|
||||
return dist.mean();
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType scale(const inverse_gaussian_distribution<RealType, Policy>& dist)
|
||||
{ // aka lambda
|
||||
return dist.scale();
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType shape(const inverse_gaussian_distribution<RealType, Policy>& dist)
|
||||
{ // aka phi
|
||||
return dist.shape();
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType standard_deviation(const inverse_gaussian_distribution<RealType, Policy>& dist)
|
||||
{
|
||||
BOOST_MATH_STD_USING
|
||||
RealType scale = dist.scale();
|
||||
RealType mean = dist.mean();
|
||||
RealType result = sqrt(mean * mean * mean / scale);
|
||||
return result;
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType mode(const inverse_gaussian_distribution<RealType, Policy>& dist)
|
||||
{
|
||||
BOOST_MATH_STD_USING
|
||||
RealType scale = dist.scale();
|
||||
RealType mean = dist.mean();
|
||||
RealType result = mean * (sqrt(1 + (9 * mean * mean)/(4 * scale * scale))
|
||||
- 3 * mean / (2 * scale));
|
||||
return result;
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType skewness(const inverse_gaussian_distribution<RealType, Policy>& dist)
|
||||
{
|
||||
BOOST_MATH_STD_USING
|
||||
RealType scale = dist.scale();
|
||||
RealType mean = dist.mean();
|
||||
RealType result = 3 * sqrt(mean/scale);
|
||||
return result;
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType kurtosis(const inverse_gaussian_distribution<RealType, Policy>& dist)
|
||||
{
|
||||
RealType scale = dist.scale();
|
||||
RealType mean = dist.mean();
|
||||
RealType result = 15 * mean / scale -3;
|
||||
return result;
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType kurtosis_excess(const inverse_gaussian_distribution<RealType, Policy>& dist)
|
||||
{
|
||||
RealType scale = dist.scale();
|
||||
RealType mean = dist.mean();
|
||||
RealType result = 15 * mean / scale;
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace math
|
||||
} // namespace boost
|
||||
|
||||
// This include must be at the end, *after* the accessors
|
||||
// for this distribution have been defined, in order to
|
||||
// keep compilers that support two-phase lookup happy.
|
||||
#include <boost/math/distributions/detail/derived_accessors.hpp>
|
||||
|
||||
#endif // BOOST_STATS_INVERSE_GAUSSIAN_HPP
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
|
||||
// Hinnant & John Maddock 2000.
|
||||
// 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_CV_HPP_INCLUDED
|
||||
#define BOOST_TT_REMOVE_CV_HPP_INCLUDED
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/detail/workaround.hpp>
|
||||
#include <cstddef> // size_t
|
||||
|
||||
namespace boost {
|
||||
|
||||
// convert a type T to a non-cv-qualified type - remove_cv<T>
|
||||
template <class T> struct remove_cv{ typedef T type; };
|
||||
template <class T> struct remove_cv<T const>{ typedef T type; };
|
||||
template <class T> struct remove_cv<T volatile>{ typedef T type; };
|
||||
template <class T> struct remove_cv<T const volatile>{ typedef T type; };
|
||||
|
||||
#if !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
|
||||
template <class T, std::size_t N> struct remove_cv<T const[N]>{ typedef T type[N]; };
|
||||
template <class T, std::size_t N> struct remove_cv<T const volatile[N]>{ typedef T type[N]; };
|
||||
template <class T, std::size_t N> struct remove_cv<T volatile[N]>{ typedef T type[N]; };
|
||||
#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
|
||||
template <class T> struct remove_cv<T const[]>{ typedef T type[]; };
|
||||
template <class T> struct remove_cv<T const volatile[]>{ typedef T type[]; };
|
||||
template <class T> struct remove_cv<T volatile[]>{ typedef T type[]; };
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif // BOOST_TT_REMOVE_CV_HPP_INCLUDED
|
||||
@@ -0,0 +1,49 @@
|
||||
// Boost.Units - A C++ library for zero-overhead dimensional analysis and
|
||||
// unit/quantity manipulation and conversion
|
||||
//
|
||||
// Copyright (C) 2003-2008 Matthias Christian Schabel
|
||||
// Copyright (C) 2008 Steven Watanabe
|
||||
//
|
||||
// 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_UNITS_SOLID_ANGLE_BASE_DIMENSION_HPP
|
||||
#define BOOST_UNITS_SOLID_ANGLE_BASE_DIMENSION_HPP
|
||||
|
||||
#include <boost/units/config.hpp>
|
||||
#include <boost/units/base_dimension.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
namespace units {
|
||||
|
||||
/// base dimension of solid angle
|
||||
struct solid_angle_base_dimension :
|
||||
boost::units::base_dimension<solid_angle_base_dimension,-1>
|
||||
{ };
|
||||
|
||||
} // namespace units
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#if BOOST_UNITS_HAS_BOOST_TYPEOF
|
||||
|
||||
#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()
|
||||
|
||||
BOOST_TYPEOF_REGISTER_TYPE(boost::units::solid_angle_base_dimension)
|
||||
|
||||
#endif
|
||||
|
||||
namespace boost {
|
||||
|
||||
namespace units {
|
||||
|
||||
/// base dimension of solid angle (QS)
|
||||
typedef solid_angle_base_dimension::dimension_type solid_angle_dimension;
|
||||
|
||||
} // namespace units
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif // BOOST_UNITS_SOLID_ANGLE_BASE_DIMENSION_HPP
|
||||
@@ -0,0 +1,37 @@
|
||||
#!/opt/local/bin/octave -qf
|
||||
# read a parity check matrix produced by the peg algorithm and
|
||||
# convert to alist format so that it can be read using alist_to_pcheck
|
||||
arg_list=argv();
|
||||
filename=arg_list{1};
|
||||
fid=fopen(filename,"r");
|
||||
N=fscanf(fid,"%d",[1]);
|
||||
M=fscanf(fid,"%d",[1]);
|
||||
pcheck=zeros(M,N);
|
||||
max_bits_in_check=fscanf(fid,"%d",[1]);
|
||||
for i=1:M
|
||||
vec=fscanf(fid,"%d",[max_bits_in_check]);
|
||||
pcheck(i,vec(vec>0))=1;
|
||||
endfor
|
||||
|
||||
max_bits_in_check2=max(sum(pcheck'));
|
||||
max_checks_per_bit=max(sum(pcheck));
|
||||
printf("%d %d\n",M,N);
|
||||
printf("%d %d\n",max_bits_in_check2,max_checks_per_bit);
|
||||
printf("%d ",sum(pcheck'));
|
||||
printf("\n");
|
||||
printf("%d ",sum(pcheck));
|
||||
printf("\n");
|
||||
for i=1:M
|
||||
vec=find(pcheck(i,:)>0);
|
||||
pr=zeros(1,max_bits_in_check2);
|
||||
pr(1:size(vec)(2))=vec;
|
||||
printf("%d ",pr);
|
||||
printf("\n");
|
||||
endfor
|
||||
for i=1:N
|
||||
vec=find(pcheck(:,i)>0);
|
||||
pr=zeros(1,max_checks_per_bit);
|
||||
pr(1:size(vec)(1))=vec;
|
||||
printf("%d ",pr)
|
||||
printf("\n");
|
||||
endfor
|
||||
@@ -0,0 +1,76 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2011 Joel de Guzman
|
||||
Copyright (c) 2005-2006 Dan Marsden
|
||||
|
||||
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_PREV_IMPL_13122005_2110)
|
||||
#define FUSION_PREV_IMPL_13122005_2110
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/iterator/prior.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
struct transform_view_iterator_tag;
|
||||
struct transform_view_iterator2_tag;
|
||||
|
||||
template<typename First, typename F>
|
||||
struct transform_view_iterator;
|
||||
|
||||
template <typename First1, typename First2, typename F>
|
||||
struct transform_view_iterator2;
|
||||
|
||||
namespace extension
|
||||
{
|
||||
template<typename Tag>
|
||||
struct prior_impl;
|
||||
|
||||
// Unary Version
|
||||
template<>
|
||||
struct prior_impl<transform_view_iterator_tag>
|
||||
{
|
||||
template<typename Iterator>
|
||||
struct apply
|
||||
{
|
||||
typedef typename Iterator::first_type first_type;
|
||||
typedef typename result_of::prior<first_type>::type prior_type;
|
||||
typedef typename Iterator::transform_type transform_type;
|
||||
typedef transform_view_iterator<prior_type, transform_type> type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Iterator const& i)
|
||||
{
|
||||
return type(fusion::prior(i.first), i.f);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// Binary Version
|
||||
template<>
|
||||
struct prior_impl<transform_view_iterator2_tag>
|
||||
{
|
||||
template<typename Iterator>
|
||||
struct apply
|
||||
{
|
||||
typedef typename Iterator::first1_type first1_type;
|
||||
typedef typename Iterator::first2_type first2_type;
|
||||
typedef typename result_of::prior<first1_type>::type prior1_type;
|
||||
typedef typename result_of::prior<first2_type>::type prior2_type;
|
||||
typedef typename Iterator::transform_type transform_type;
|
||||
typedef transform_view_iterator2<prior1_type, prior2_type, transform_type> type;
|
||||
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
static type
|
||||
call(Iterator const& i)
|
||||
{
|
||||
return type(fusion::prior(i.first1), fusion::prior(i.first2), i.f);
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* 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)
|
||||
*
|
||||
* Copyright (c) 2014 Andrey Semashev
|
||||
*/
|
||||
/*!
|
||||
* \file atomic/detail/operations_lockfree.hpp
|
||||
*
|
||||
* This header defines lockfree atomic operations.
|
||||
*/
|
||||
|
||||
#ifndef BOOST_ATOMIC_DETAIL_OPERATIONS_LOCKFREE_HPP_INCLUDED_
|
||||
#define BOOST_ATOMIC_DETAIL_OPERATIONS_LOCKFREE_HPP_INCLUDED_
|
||||
|
||||
#include <boost/atomic/detail/config.hpp>
|
||||
#include <boost/atomic/detail/platform.hpp>
|
||||
|
||||
#if !defined(BOOST_ATOMIC_EMULATED)
|
||||
#include BOOST_ATOMIC_DETAIL_HEADER(boost/atomic/detail/ops_)
|
||||
#else
|
||||
#include <boost/atomic/detail/operations_fwd.hpp>
|
||||
#endif
|
||||
|
||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#endif // BOOST_ATOMIC_DETAIL_OPERATIONS_LOCKFREE_HPP_INCLUDED_
|
||||
@@ -0,0 +1,72 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 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_BOOST_FUSION_SUPPORT_PP_ROUND_HPP
|
||||
#define BOOST_BOOST_FUSION_SUPPORT_PP_ROUND_HPP
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/preprocessor/cat.hpp>
|
||||
#include <boost/preprocessor/comparison/less.hpp>
|
||||
#include <boost/preprocessor/control/if.hpp>
|
||||
|
||||
#define BOOST_FUSION_PP_ROUND_UP(N) \
|
||||
BOOST_PP_CAT(BOOST_FUSION_PP_DO_ROUND_UP_, N)() \
|
||||
/**/
|
||||
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_0() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_1() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_2() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_3() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_4() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_5() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_6() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_7() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_8() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_9() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_10() 10
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_11() 20
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_12() 20
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_13() 20
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_14() 20
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_15() 20
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_16() 20
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_17() 20
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_18() 20
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_19() 20
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_20() 20
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_21() 30
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_22() 30
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_23() 30
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_24() 30
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_25() 30
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_26() 30
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_27() 30
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_28() 30
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_29() 30
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_30() 30
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_31() 40
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_32() 40
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_33() 40
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_34() 40
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_35() 40
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_36() 40
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_37() 40
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_38() 40
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_39() 40
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_40() 40
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_41() 50
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_42() 50
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_43() 50
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_44() 50
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_45() 50
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_46() 50
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_47() 50
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_48() 50
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_49() 50
|
||||
#define BOOST_FUSION_PP_DO_ROUND_UP_50() 50
|
||||
|
||||
#endif
|
||||
@@ -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_CONVERT_09222005_1104)
|
||||
#define FUSION_CONVERT_09222005_1104
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/container/vector/detail/as_vector.hpp>
|
||||
#include <boost/fusion/container/vector/detail/convert_impl.hpp>
|
||||
#include <boost/fusion/container/vector/vector.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/begin.hpp>
|
||||
#include <boost/fusion/sequence/intrinsic/size.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace result_of
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct as_vector
|
||||
{
|
||||
typedef typename detail::as_vector<result_of::size<Sequence>::value> gen;
|
||||
typedef typename gen::
|
||||
template apply<typename result_of::begin<Sequence>::type>::type
|
||||
type;
|
||||
};
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::as_vector<Sequence>::type
|
||||
as_vector(Sequence& seq)
|
||||
{
|
||||
typedef typename result_of::as_vector<Sequence>::gen gen;
|
||||
return gen::call(fusion::begin(seq));
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::as_vector<Sequence const>::type
|
||||
as_vector(Sequence const& seq)
|
||||
{
|
||||
typedef typename result_of::as_vector<Sequence const>::gen gen;
|
||||
return gen::call(fusion::begin(seq));
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,56 @@
|
||||
/*
|
||||
* 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)
|
||||
*
|
||||
* Copyright (c) 2009 Helge Bahmann
|
||||
* Copyright (c) 2009 Phil Endecott
|
||||
* Copyright (c) 2013 Tim Blechmann
|
||||
* ARM Code by Phil Endecott, based on other architectures.
|
||||
* Copyright (c) 2014 Andrey Semashev
|
||||
*/
|
||||
/*!
|
||||
* \file atomic/detail/caps_gcc_arm.hpp
|
||||
*
|
||||
* This header defines feature capabilities macros
|
||||
*/
|
||||
|
||||
#ifndef BOOST_ATOMIC_DETAIL_CAPS_GCC_ARM_HPP_INCLUDED_
|
||||
#define BOOST_ATOMIC_DETAIL_CAPS_GCC_ARM_HPP_INCLUDED_
|
||||
|
||||
#include <boost/atomic/detail/config.hpp>
|
||||
|
||||
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#if !(defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__))
|
||||
// ARMv7 and later have dmb instruction
|
||||
#define BOOST_ATOMIC_DETAIL_ARM_HAS_DMB 1
|
||||
#endif
|
||||
|
||||
#if !(defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6Z__))
|
||||
// ARMv6k and ARMv7 have 8 and 16 ldrex/strex variants
|
||||
#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB 1
|
||||
#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH 1
|
||||
#if !(((defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__)) && defined(__thumb__)) || defined(__ARM_ARCH_7M__))
|
||||
// ARMv6k and ARMv7 except ARMv7-M have 64-bit ldrex/strex variants.
|
||||
// Unfortunately, GCC (at least 4.7.3 on Ubuntu) does not allocate register pairs properly when targeting ARMv6k Thumb,
|
||||
// which is required for ldrexd/strexd instructions, so we disable 64-bit support. When targeting ARMv6k ARM
|
||||
// or ARMv7 (both ARM and Thumb 2) it works as expected.
|
||||
#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||
#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD)
|
||||
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||
#endif
|
||||
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||
|
||||
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||
|
||||
#endif // BOOST_ATOMIC_DETAIL_CAPS_GCC_ARM_HPP_INCLUDED_
|
||||
@@ -0,0 +1,302 @@
|
||||
// Gaussian energy fading tables for QRA64
|
||||
static const int glen_tab_gauss[64] = {
|
||||
2, 2, 2, 2, 2, 2, 2, 2,
|
||||
2, 2, 2, 2, 2, 2, 2, 2,
|
||||
3, 3, 3, 3, 3, 3, 3, 3,
|
||||
4, 4, 4, 4, 5, 5, 5, 6,
|
||||
6, 6, 7, 7, 8, 8, 9, 10,
|
||||
10, 11, 12, 13, 14, 15, 17, 18,
|
||||
19, 21, 23, 25, 27, 29, 32, 34,
|
||||
37, 41, 44, 48, 52, 57, 62, 65
|
||||
};
|
||||
static const float ggauss1[2] = {
|
||||
0.0296f, 0.9101f
|
||||
};
|
||||
static const float ggauss2[2] = {
|
||||
0.0350f, 0.8954f
|
||||
};
|
||||
static const float ggauss3[2] = {
|
||||
0.0411f, 0.8787f
|
||||
};
|
||||
static const float ggauss4[2] = {
|
||||
0.0483f, 0.8598f
|
||||
};
|
||||
static const float ggauss5[2] = {
|
||||
0.0566f, 0.8387f
|
||||
};
|
||||
static const float ggauss6[2] = {
|
||||
0.0660f, 0.8154f
|
||||
};
|
||||
static const float ggauss7[2] = {
|
||||
0.0767f, 0.7898f
|
||||
};
|
||||
static const float ggauss8[2] = {
|
||||
0.0886f, 0.7621f
|
||||
};
|
||||
static const float ggauss9[2] = {
|
||||
0.1017f, 0.7325f
|
||||
};
|
||||
static const float ggauss10[2] = {
|
||||
0.1159f, 0.7012f
|
||||
};
|
||||
static const float ggauss11[2] = {
|
||||
0.1310f, 0.6687f
|
||||
};
|
||||
static const float ggauss12[2] = {
|
||||
0.1465f, 0.6352f
|
||||
};
|
||||
static const float ggauss13[2] = {
|
||||
0.1621f, 0.6013f
|
||||
};
|
||||
static const float ggauss14[2] = {
|
||||
0.1771f, 0.5674f
|
||||
};
|
||||
static const float ggauss15[2] = {
|
||||
0.1911f, 0.5339f
|
||||
};
|
||||
static const float ggauss16[2] = {
|
||||
0.2034f, 0.5010f
|
||||
};
|
||||
static const float ggauss17[3] = {
|
||||
0.0299f, 0.2135f, 0.4690f
|
||||
};
|
||||
static const float ggauss18[3] = {
|
||||
0.0369f, 0.2212f, 0.4383f
|
||||
};
|
||||
static const float ggauss19[3] = {
|
||||
0.0454f, 0.2263f, 0.4088f
|
||||
};
|
||||
static const float ggauss20[3] = {
|
||||
0.0552f, 0.2286f, 0.3806f
|
||||
};
|
||||
static const float ggauss21[3] = {
|
||||
0.0658f, 0.2284f, 0.3539f
|
||||
};
|
||||
static const float ggauss22[3] = {
|
||||
0.0766f, 0.2258f, 0.3287f
|
||||
};
|
||||
static const float ggauss23[3] = {
|
||||
0.0869f, 0.2212f, 0.3049f
|
||||
};
|
||||
static const float ggauss24[3] = {
|
||||
0.0962f, 0.2148f, 0.2826f
|
||||
};
|
||||
static const float ggauss25[4] = {
|
||||
0.0351f, 0.1041f, 0.2071f, 0.2616f
|
||||
};
|
||||
static const float ggauss26[4] = {
|
||||
0.0429f, 0.1102f, 0.1984f, 0.2420f
|
||||
};
|
||||
static const float ggauss27[4] = {
|
||||
0.0508f, 0.1145f, 0.1890f, 0.2237f
|
||||
};
|
||||
static const float ggauss28[4] = {
|
||||
0.0582f, 0.1169f, 0.1791f, 0.2067f
|
||||
};
|
||||
static const float ggauss29[5] = {
|
||||
0.0289f, 0.0648f, 0.1176f, 0.1689f, 0.1908f
|
||||
};
|
||||
static const float ggauss30[5] = {
|
||||
0.0351f, 0.0703f, 0.1168f, 0.1588f, 0.1760f
|
||||
};
|
||||
static const float ggauss31[5] = {
|
||||
0.0411f, 0.0745f, 0.1146f, 0.1488f, 0.1623f
|
||||
};
|
||||
static const float ggauss32[6] = {
|
||||
0.0246f, 0.0466f, 0.0773f, 0.1115f, 0.1390f, 0.1497f
|
||||
};
|
||||
static const float ggauss33[6] = {
|
||||
0.0297f, 0.0512f, 0.0788f, 0.1075f, 0.1295f, 0.1379f
|
||||
};
|
||||
static const float ggauss34[6] = {
|
||||
0.0345f, 0.0549f, 0.0791f, 0.1029f, 0.1205f, 0.1270f
|
||||
};
|
||||
static const float ggauss35[7] = {
|
||||
0.0240f, 0.0387f, 0.0575f, 0.0784f, 0.0979f, 0.1118f, 0.1169f
|
||||
};
|
||||
static const float ggauss36[7] = {
|
||||
0.0281f, 0.0422f, 0.0590f, 0.0767f, 0.0926f, 0.1037f, 0.1076f
|
||||
};
|
||||
static const float ggauss37[8] = {
|
||||
0.0212f, 0.0318f, 0.0449f, 0.0596f, 0.0744f, 0.0872f, 0.0960f, 0.0991f
|
||||
};
|
||||
static const float ggauss38[8] = {
|
||||
0.0247f, 0.0348f, 0.0467f, 0.0593f, 0.0716f, 0.0819f, 0.0887f, 0.0911f
|
||||
};
|
||||
static const float ggauss39[9] = {
|
||||
0.0199f, 0.0278f, 0.0372f, 0.0476f, 0.0584f, 0.0684f, 0.0766f, 0.0819f,
|
||||
0.0838f
|
||||
};
|
||||
static const float ggauss40[10] = {
|
||||
0.0166f, 0.0228f, 0.0303f, 0.0388f, 0.0478f, 0.0568f, 0.0649f, 0.0714f,
|
||||
0.0756f, 0.0771f
|
||||
};
|
||||
static const float ggauss41[10] = {
|
||||
0.0193f, 0.0254f, 0.0322f, 0.0397f, 0.0474f, 0.0548f, 0.0613f, 0.0664f,
|
||||
0.0697f, 0.0709f
|
||||
};
|
||||
static const float ggauss42[11] = {
|
||||
0.0168f, 0.0217f, 0.0273f, 0.0335f, 0.0399f, 0.0464f, 0.0524f, 0.0576f,
|
||||
0.0617f, 0.0643f, 0.0651f
|
||||
};
|
||||
static const float ggauss43[12] = {
|
||||
0.0151f, 0.0191f, 0.0237f, 0.0288f, 0.0342f, 0.0396f, 0.0449f, 0.0498f,
|
||||
0.0540f, 0.0572f, 0.0592f, 0.0599f
|
||||
};
|
||||
static const float ggauss44[13] = {
|
||||
0.0138f, 0.0171f, 0.0210f, 0.0252f, 0.0297f, 0.0343f, 0.0388f, 0.0432f,
|
||||
0.0471f, 0.0504f, 0.0529f, 0.0545f, 0.0550f
|
||||
};
|
||||
static const float ggauss45[14] = {
|
||||
0.0128f, 0.0157f, 0.0189f, 0.0224f, 0.0261f, 0.0300f, 0.0339f, 0.0377f,
|
||||
0.0412f, 0.0444f, 0.0470f, 0.0489f, 0.0501f, 0.0505f
|
||||
};
|
||||
static const float ggauss46[15] = {
|
||||
0.0121f, 0.0146f, 0.0173f, 0.0202f, 0.0234f, 0.0266f, 0.0299f, 0.0332f,
|
||||
0.0363f, 0.0391f, 0.0416f, 0.0437f, 0.0452f, 0.0461f, 0.0464f
|
||||
};
|
||||
static const float ggauss47[17] = {
|
||||
0.0097f, 0.0116f, 0.0138f, 0.0161f, 0.0186f, 0.0212f, 0.0239f, 0.0267f,
|
||||
0.0294f, 0.0321f, 0.0346f, 0.0369f, 0.0389f, 0.0405f, 0.0417f, 0.0424f,
|
||||
0.0427f
|
||||
};
|
||||
static const float ggauss48[18] = {
|
||||
0.0096f, 0.0113f, 0.0131f, 0.0151f, 0.0172f, 0.0194f, 0.0217f, 0.0241f,
|
||||
0.0264f, 0.0287f, 0.0308f, 0.0329f, 0.0347f, 0.0362f, 0.0375f, 0.0384f,
|
||||
0.0390f, 0.0392f
|
||||
};
|
||||
static const float ggauss49[19] = {
|
||||
0.0095f, 0.0110f, 0.0126f, 0.0143f, 0.0161f, 0.0180f, 0.0199f, 0.0219f,
|
||||
0.0239f, 0.0258f, 0.0277f, 0.0294f, 0.0310f, 0.0325f, 0.0337f, 0.0347f,
|
||||
0.0354f, 0.0358f, 0.0360f
|
||||
};
|
||||
static const float ggauss50[21] = {
|
||||
0.0083f, 0.0095f, 0.0108f, 0.0122f, 0.0136f, 0.0152f, 0.0168f, 0.0184f,
|
||||
0.0201f, 0.0217f, 0.0234f, 0.0250f, 0.0265f, 0.0279f, 0.0292f, 0.0303f,
|
||||
0.0313f, 0.0320f, 0.0326f, 0.0329f, 0.0330f
|
||||
};
|
||||
static const float ggauss51[23] = {
|
||||
0.0074f, 0.0084f, 0.0095f, 0.0106f, 0.0118f, 0.0131f, 0.0144f, 0.0157f,
|
||||
0.0171f, 0.0185f, 0.0199f, 0.0213f, 0.0227f, 0.0240f, 0.0252f, 0.0263f,
|
||||
0.0273f, 0.0282f, 0.0290f, 0.0296f, 0.0300f, 0.0303f, 0.0303f
|
||||
};
|
||||
static const float ggauss52[25] = {
|
||||
0.0068f, 0.0076f, 0.0085f, 0.0094f, 0.0104f, 0.0115f, 0.0126f, 0.0137f,
|
||||
0.0149f, 0.0160f, 0.0172f, 0.0184f, 0.0196f, 0.0207f, 0.0218f, 0.0228f,
|
||||
0.0238f, 0.0247f, 0.0255f, 0.0262f, 0.0268f, 0.0273f, 0.0276f, 0.0278f,
|
||||
0.0279f
|
||||
};
|
||||
static const float ggauss53[27] = {
|
||||
0.0063f, 0.0070f, 0.0078f, 0.0086f, 0.0094f, 0.0103f, 0.0112f, 0.0121f,
|
||||
0.0131f, 0.0141f, 0.0151f, 0.0161f, 0.0170f, 0.0180f, 0.0190f, 0.0199f,
|
||||
0.0208f, 0.0216f, 0.0224f, 0.0231f, 0.0237f, 0.0243f, 0.0247f, 0.0251f,
|
||||
0.0254f, 0.0255f, 0.0256f
|
||||
};
|
||||
static const float ggauss54[29] = {
|
||||
0.0060f, 0.0066f, 0.0072f, 0.0079f, 0.0086f, 0.0093f, 0.0101f, 0.0109f,
|
||||
0.0117f, 0.0125f, 0.0133f, 0.0142f, 0.0150f, 0.0159f, 0.0167f, 0.0175f,
|
||||
0.0183f, 0.0190f, 0.0197f, 0.0204f, 0.0210f, 0.0216f, 0.0221f, 0.0225f,
|
||||
0.0228f, 0.0231f, 0.0233f, 0.0234f, 0.0235f
|
||||
};
|
||||
static const float ggauss55[32] = {
|
||||
0.0053f, 0.0058f, 0.0063f, 0.0068f, 0.0074f, 0.0080f, 0.0086f, 0.0093f,
|
||||
0.0099f, 0.0106f, 0.0113f, 0.0120f, 0.0127f, 0.0134f, 0.0141f, 0.0148f,
|
||||
0.0155f, 0.0162f, 0.0168f, 0.0174f, 0.0180f, 0.0186f, 0.0191f, 0.0196f,
|
||||
0.0201f, 0.0204f, 0.0208f, 0.0211f, 0.0213f, 0.0214f, 0.0215f, 0.0216f
|
||||
};
|
||||
static const float ggauss56[34] = {
|
||||
0.0052f, 0.0056f, 0.0060f, 0.0065f, 0.0070f, 0.0075f, 0.0080f, 0.0086f,
|
||||
0.0091f, 0.0097f, 0.0103f, 0.0109f, 0.0115f, 0.0121f, 0.0127f, 0.0133f,
|
||||
0.0138f, 0.0144f, 0.0150f, 0.0155f, 0.0161f, 0.0166f, 0.0170f, 0.0175f,
|
||||
0.0179f, 0.0183f, 0.0186f, 0.0189f, 0.0192f, 0.0194f, 0.0196f, 0.0197f,
|
||||
0.0198f, 0.0198f
|
||||
};
|
||||
static const float ggauss57[37] = {
|
||||
0.0047f, 0.0051f, 0.0055f, 0.0058f, 0.0063f, 0.0067f, 0.0071f, 0.0076f,
|
||||
0.0080f, 0.0085f, 0.0090f, 0.0095f, 0.0100f, 0.0105f, 0.0110f, 0.0115f,
|
||||
0.0120f, 0.0125f, 0.0130f, 0.0134f, 0.0139f, 0.0144f, 0.0148f, 0.0152f,
|
||||
0.0156f, 0.0160f, 0.0164f, 0.0167f, 0.0170f, 0.0173f, 0.0175f, 0.0177f,
|
||||
0.0179f, 0.0180f, 0.0181f, 0.0181f, 0.0182f
|
||||
};
|
||||
static const float ggauss58[41] = {
|
||||
0.0041f, 0.0044f, 0.0047f, 0.0050f, 0.0054f, 0.0057f, 0.0060f, 0.0064f,
|
||||
0.0068f, 0.0072f, 0.0076f, 0.0080f, 0.0084f, 0.0088f, 0.0092f, 0.0096f,
|
||||
0.0101f, 0.0105f, 0.0109f, 0.0113f, 0.0117f, 0.0121f, 0.0125f, 0.0129f,
|
||||
0.0133f, 0.0137f, 0.0140f, 0.0144f, 0.0147f, 0.0150f, 0.0153f, 0.0155f,
|
||||
0.0158f, 0.0160f, 0.0162f, 0.0163f, 0.0164f, 0.0165f, 0.0166f, 0.0167f,
|
||||
0.0167f
|
||||
};
|
||||
static const float ggauss59[44] = {
|
||||
0.0039f, 0.0042f, 0.0044f, 0.0047f, 0.0050f, 0.0053f, 0.0056f, 0.0059f,
|
||||
0.0062f, 0.0065f, 0.0068f, 0.0072f, 0.0075f, 0.0079f, 0.0082f, 0.0086f,
|
||||
0.0089f, 0.0093f, 0.0096f, 0.0100f, 0.0104f, 0.0107f, 0.0110f, 0.0114f,
|
||||
0.0117f, 0.0120f, 0.0124f, 0.0127f, 0.0130f, 0.0132f, 0.0135f, 0.0138f,
|
||||
0.0140f, 0.0142f, 0.0144f, 0.0146f, 0.0148f, 0.0149f, 0.0150f, 0.0151f,
|
||||
0.0152f, 0.0153f, 0.0153f, 0.0153f
|
||||
};
|
||||
static const float ggauss60[48] = {
|
||||
0.0036f, 0.0038f, 0.0040f, 0.0042f, 0.0044f, 0.0047f, 0.0049f, 0.0052f,
|
||||
0.0055f, 0.0057f, 0.0060f, 0.0063f, 0.0066f, 0.0068f, 0.0071f, 0.0074f,
|
||||
0.0077f, 0.0080f, 0.0083f, 0.0086f, 0.0089f, 0.0092f, 0.0095f, 0.0098f,
|
||||
0.0101f, 0.0104f, 0.0107f, 0.0109f, 0.0112f, 0.0115f, 0.0117f, 0.0120f,
|
||||
0.0122f, 0.0124f, 0.0126f, 0.0128f, 0.0130f, 0.0132f, 0.0134f, 0.0135f,
|
||||
0.0136f, 0.0137f, 0.0138f, 0.0139f, 0.0140f, 0.0140f, 0.0140f, 0.0140f
|
||||
};
|
||||
static const float ggauss61[52] = {
|
||||
0.0033f, 0.0035f, 0.0037f, 0.0039f, 0.0041f, 0.0043f, 0.0045f, 0.0047f,
|
||||
0.0049f, 0.0051f, 0.0053f, 0.0056f, 0.0058f, 0.0060f, 0.0063f, 0.0065f,
|
||||
0.0068f, 0.0070f, 0.0073f, 0.0075f, 0.0078f, 0.0080f, 0.0083f, 0.0085f,
|
||||
0.0088f, 0.0090f, 0.0093f, 0.0095f, 0.0098f, 0.0100f, 0.0102f, 0.0105f,
|
||||
0.0107f, 0.0109f, 0.0111f, 0.0113f, 0.0115f, 0.0116f, 0.0118f, 0.0120f,
|
||||
0.0121f, 0.0122f, 0.0124f, 0.0125f, 0.0126f, 0.0126f, 0.0127f, 0.0128f,
|
||||
0.0128f, 0.0129f, 0.0129f, 0.0129f
|
||||
};
|
||||
static const float ggauss62[57] = {
|
||||
0.0030f, 0.0031f, 0.0033f, 0.0034f, 0.0036f, 0.0038f, 0.0039f, 0.0041f,
|
||||
0.0043f, 0.0045f, 0.0047f, 0.0048f, 0.0050f, 0.0052f, 0.0054f, 0.0056f,
|
||||
0.0058f, 0.0060f, 0.0063f, 0.0065f, 0.0067f, 0.0069f, 0.0071f, 0.0073f,
|
||||
0.0075f, 0.0077f, 0.0080f, 0.0082f, 0.0084f, 0.0086f, 0.0088f, 0.0090f,
|
||||
0.0092f, 0.0094f, 0.0096f, 0.0097f, 0.0099f, 0.0101f, 0.0103f, 0.0104f,
|
||||
0.0106f, 0.0107f, 0.0108f, 0.0110f, 0.0111f, 0.0112f, 0.0113f, 0.0114f,
|
||||
0.0115f, 0.0116f, 0.0116f, 0.0117f, 0.0117f, 0.0118f, 0.0118f, 0.0118f,
|
||||
0.0118f
|
||||
};
|
||||
static const float ggauss63[62] = {
|
||||
0.0027f, 0.0029f, 0.0030f, 0.0031f, 0.0032f, 0.0034f, 0.0035f, 0.0037f,
|
||||
0.0038f, 0.0040f, 0.0041f, 0.0043f, 0.0045f, 0.0046f, 0.0048f, 0.0049f,
|
||||
0.0051f, 0.0053f, 0.0055f, 0.0056f, 0.0058f, 0.0060f, 0.0062f, 0.0063f,
|
||||
0.0065f, 0.0067f, 0.0069f, 0.0071f, 0.0072f, 0.0074f, 0.0076f, 0.0078f,
|
||||
0.0079f, 0.0081f, 0.0083f, 0.0084f, 0.0086f, 0.0088f, 0.0089f, 0.0091f,
|
||||
0.0092f, 0.0094f, 0.0095f, 0.0096f, 0.0098f, 0.0099f, 0.0100f, 0.0101f,
|
||||
0.0102f, 0.0103f, 0.0104f, 0.0105f, 0.0105f, 0.0106f, 0.0107f, 0.0107f,
|
||||
0.0108f, 0.0108f, 0.0108f, 0.0108f, 0.0109f, 0.0109f
|
||||
};
|
||||
static const float ggauss64[65] = {
|
||||
0.0028f, 0.0029f, 0.0030f, 0.0031f, 0.0032f, 0.0034f, 0.0035f, 0.0036f,
|
||||
0.0037f, 0.0039f, 0.0040f, 0.0041f, 0.0043f, 0.0044f, 0.0046f, 0.0047f,
|
||||
0.0048f, 0.0050f, 0.0051f, 0.0053f, 0.0054f, 0.0056f, 0.0057f, 0.0059f,
|
||||
0.0060f, 0.0062f, 0.0063f, 0.0065f, 0.0066f, 0.0068f, 0.0069f, 0.0071f,
|
||||
0.0072f, 0.0074f, 0.0075f, 0.0077f, 0.0078f, 0.0079f, 0.0081f, 0.0082f,
|
||||
0.0083f, 0.0084f, 0.0086f, 0.0087f, 0.0088f, 0.0089f, 0.0090f, 0.0091f,
|
||||
0.0092f, 0.0093f, 0.0094f, 0.0094f, 0.0095f, 0.0096f, 0.0097f, 0.0097f,
|
||||
0.0098f, 0.0098f, 0.0099f, 0.0099f, 0.0099f, 0.0099f, 0.0100f, 0.0100f,
|
||||
0.0100f
|
||||
};
|
||||
static const float *gptr_tab_gauss[64] = {
|
||||
ggauss1, ggauss2, ggauss3, ggauss4,
|
||||
ggauss5, ggauss6, ggauss7, ggauss8,
|
||||
ggauss9, ggauss10, ggauss11, ggauss12,
|
||||
ggauss13, ggauss14, ggauss15, ggauss16,
|
||||
ggauss17, ggauss18, ggauss19, ggauss20,
|
||||
ggauss21, ggauss22, ggauss23, ggauss24,
|
||||
ggauss25, ggauss26, ggauss27, ggauss28,
|
||||
ggauss29, ggauss30, ggauss31, ggauss32,
|
||||
ggauss33, ggauss34, ggauss35, ggauss36,
|
||||
ggauss37, ggauss38, ggauss39, ggauss40,
|
||||
ggauss41, ggauss42, ggauss43, ggauss44,
|
||||
ggauss45, ggauss46, ggauss47, ggauss48,
|
||||
ggauss49, ggauss50, ggauss51, ggauss52,
|
||||
ggauss53, ggauss54, ggauss55, ggauss56,
|
||||
ggauss57, ggauss58, ggauss59, ggauss60,
|
||||
ggauss61, ggauss62, ggauss63, ggauss64
|
||||
};
|
||||
@@ -0,0 +1,653 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 1998-2003 Joel de Guzman
|
||||
Copyright (c) 2003 Martin Wille
|
||||
http://spirit.sourceforge.net/
|
||||
|
||||
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_SPIRIT_PRIMITIVES_HPP)
|
||||
#define BOOST_SPIRIT_PRIMITIVES_HPP
|
||||
|
||||
#include <boost/ref.hpp>
|
||||
#include <boost/spirit/home/classic/namespace.hpp>
|
||||
#include <boost/spirit/home/classic/core/assert.hpp>
|
||||
#include <boost/spirit/home/classic/core/parser.hpp>
|
||||
#include <boost/spirit/home/classic/core/composite/impl/directives.ipp>
|
||||
#include <boost/spirit/home/classic/core/primitives/impl/primitives.ipp>
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning (push)
|
||||
#pragma warning(disable : 4512)
|
||||
#endif
|
||||
|
||||
namespace boost { namespace spirit {
|
||||
|
||||
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// char_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename DerivedT>
|
||||
struct char_parser : public parser<DerivedT>
|
||||
{
|
||||
typedef DerivedT self_t;
|
||||
template <typename ScannerT>
|
||||
struct result
|
||||
{
|
||||
typedef typename match_result<
|
||||
ScannerT,
|
||||
typename ScannerT::value_t
|
||||
>::type type;
|
||||
};
|
||||
|
||||
template <typename ScannerT>
|
||||
typename parser_result<self_t, ScannerT>::type
|
||||
parse(ScannerT const& scan) const
|
||||
{
|
||||
typedef typename ScannerT::value_t value_t;
|
||||
typedef typename ScannerT::iterator_t iterator_t;
|
||||
|
||||
if (!scan.at_end())
|
||||
{
|
||||
value_t ch = *scan;
|
||||
if (this->derived().test(ch))
|
||||
{
|
||||
iterator_t save(scan.first);
|
||||
++scan.first;
|
||||
return scan.create_match(1, ch, save, scan.first);
|
||||
}
|
||||
}
|
||||
return scan.no_match();
|
||||
}
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// negation of char_parsers
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename PositiveT>
|
||||
struct negated_char_parser
|
||||
: public char_parser<negated_char_parser<PositiveT> >
|
||||
{
|
||||
typedef negated_char_parser<PositiveT> self_t;
|
||||
typedef PositiveT positive_t;
|
||||
|
||||
negated_char_parser(positive_t const& p)
|
||||
: positive(p.derived()) {}
|
||||
|
||||
template <typename T>
|
||||
bool test(T ch) const
|
||||
{
|
||||
return !positive.test(ch);
|
||||
}
|
||||
|
||||
positive_t const positive;
|
||||
};
|
||||
|
||||
template <typename ParserT>
|
||||
inline negated_char_parser<ParserT>
|
||||
operator~(char_parser<ParserT> const& p)
|
||||
{
|
||||
return negated_char_parser<ParserT>(p.derived());
|
||||
}
|
||||
|
||||
template <typename ParserT>
|
||||
inline ParserT
|
||||
operator~(negated_char_parser<ParserT> const& n)
|
||||
{
|
||||
return n.positive;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// chlit class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename CharT = char>
|
||||
struct chlit : public char_parser<chlit<CharT> >
|
||||
{
|
||||
chlit(CharT ch_)
|
||||
: ch(ch_) {}
|
||||
|
||||
template <typename T>
|
||||
bool test(T ch_) const
|
||||
{
|
||||
return ch_ == ch;
|
||||
}
|
||||
|
||||
CharT ch;
|
||||
};
|
||||
|
||||
template <typename CharT>
|
||||
inline chlit<CharT>
|
||||
ch_p(CharT ch)
|
||||
{
|
||||
return chlit<CharT>(ch);
|
||||
}
|
||||
|
||||
// This should take care of ch_p("a") "bugs"
|
||||
template <typename CharT, std::size_t N>
|
||||
inline chlit<CharT>
|
||||
ch_p(CharT const (& str)[N])
|
||||
{
|
||||
// ch_p's argument should be a single character or a null-terminated
|
||||
// string with a single character
|
||||
BOOST_STATIC_ASSERT(N < 3);
|
||||
return chlit<CharT>(str[0]);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// range class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename CharT = char>
|
||||
struct range : public char_parser<range<CharT> >
|
||||
{
|
||||
range(CharT first_, CharT last_)
|
||||
: first(first_), last(last_)
|
||||
{
|
||||
BOOST_SPIRIT_ASSERT(!(last < first));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool test(T ch) const
|
||||
{
|
||||
return !(CharT(ch) < first) && !(last < CharT(ch));
|
||||
}
|
||||
|
||||
CharT first;
|
||||
CharT last;
|
||||
};
|
||||
|
||||
template <typename CharT>
|
||||
inline range<CharT>
|
||||
range_p(CharT first, CharT last)
|
||||
{
|
||||
return range<CharT>(first, last);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// chseq class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename IteratorT = char const*>
|
||||
class chseq : public parser<chseq<IteratorT> >
|
||||
{
|
||||
public:
|
||||
|
||||
typedef chseq<IteratorT> self_t;
|
||||
|
||||
chseq(IteratorT first_, IteratorT last_)
|
||||
: first(first_), last(last_) {}
|
||||
|
||||
chseq(IteratorT first_)
|
||||
: first(first_), last(impl::get_last(first_)) {}
|
||||
|
||||
template <typename ScannerT>
|
||||
typename parser_result<self_t, ScannerT>::type
|
||||
parse(ScannerT const& scan) const
|
||||
{
|
||||
typedef typename boost::unwrap_reference<IteratorT>::type striter_t;
|
||||
typedef typename parser_result<self_t, ScannerT>::type result_t;
|
||||
return impl::string_parser_parse<result_t>(
|
||||
striter_t(first),
|
||||
striter_t(last),
|
||||
scan);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
IteratorT first;
|
||||
IteratorT last;
|
||||
};
|
||||
|
||||
template <typename CharT>
|
||||
inline chseq<CharT const*>
|
||||
chseq_p(CharT const* str)
|
||||
{
|
||||
return chseq<CharT const*>(str);
|
||||
}
|
||||
|
||||
template <typename IteratorT>
|
||||
inline chseq<IteratorT>
|
||||
chseq_p(IteratorT first, IteratorT last)
|
||||
{
|
||||
return chseq<IteratorT>(first, last);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// strlit class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename IteratorT = char const*>
|
||||
class strlit : public parser<strlit<IteratorT> >
|
||||
{
|
||||
public:
|
||||
|
||||
typedef strlit<IteratorT> self_t;
|
||||
|
||||
strlit(IteratorT first, IteratorT last)
|
||||
: seq(first, last) {}
|
||||
|
||||
strlit(IteratorT first)
|
||||
: seq(first) {}
|
||||
|
||||
template <typename ScannerT>
|
||||
typename parser_result<self_t, ScannerT>::type
|
||||
parse(ScannerT const& scan) const
|
||||
{
|
||||
typedef typename parser_result<self_t, ScannerT>::type result_t;
|
||||
return impl::contiguous_parser_parse<result_t>
|
||||
(seq, scan, scan);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
chseq<IteratorT> seq;
|
||||
};
|
||||
|
||||
template <typename CharT>
|
||||
inline strlit<CharT const*>
|
||||
str_p(CharT const* str)
|
||||
{
|
||||
return strlit<CharT const*>(str);
|
||||
}
|
||||
|
||||
template <typename CharT>
|
||||
inline strlit<CharT *>
|
||||
str_p(CharT * str)
|
||||
{
|
||||
return strlit<CharT *>(str);
|
||||
}
|
||||
|
||||
template <typename IteratorT>
|
||||
inline strlit<IteratorT>
|
||||
str_p(IteratorT first, IteratorT last)
|
||||
{
|
||||
return strlit<IteratorT>(first, last);
|
||||
}
|
||||
|
||||
// This should take care of str_p('a') "bugs"
|
||||
template <typename CharT>
|
||||
inline chlit<CharT>
|
||||
str_p(CharT ch)
|
||||
{
|
||||
return chlit<CharT>(ch);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// nothing_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct nothing_parser : public parser<nothing_parser>
|
||||
{
|
||||
typedef nothing_parser self_t;
|
||||
|
||||
nothing_parser() {}
|
||||
|
||||
template <typename ScannerT>
|
||||
typename parser_result<self_t, ScannerT>::type
|
||||
parse(ScannerT const& scan) const
|
||||
{
|
||||
return scan.no_match();
|
||||
}
|
||||
};
|
||||
|
||||
nothing_parser const nothing_p = nothing_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// anychar_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct anychar_parser : public char_parser<anychar_parser>
|
||||
{
|
||||
typedef anychar_parser self_t;
|
||||
|
||||
anychar_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT) const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
anychar_parser const anychar_p = anychar_parser();
|
||||
|
||||
inline nothing_parser
|
||||
operator~(anychar_parser)
|
||||
{
|
||||
return nothing_p;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// alnum_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct alnum_parser : public char_parser<alnum_parser>
|
||||
{
|
||||
typedef alnum_parser self_t;
|
||||
|
||||
alnum_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::isalnum_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
alnum_parser const alnum_p = alnum_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// alpha_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct alpha_parser : public char_parser<alpha_parser>
|
||||
{
|
||||
typedef alpha_parser self_t;
|
||||
|
||||
alpha_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::isalpha_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
alpha_parser const alpha_p = alpha_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// cntrl_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct cntrl_parser : public char_parser<cntrl_parser>
|
||||
{
|
||||
typedef cntrl_parser self_t;
|
||||
|
||||
cntrl_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::iscntrl_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
cntrl_parser const cntrl_p = cntrl_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// digit_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct digit_parser : public char_parser<digit_parser>
|
||||
{
|
||||
typedef digit_parser self_t;
|
||||
|
||||
digit_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::isdigit_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
digit_parser const digit_p = digit_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// graph_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct graph_parser : public char_parser<graph_parser>
|
||||
{
|
||||
typedef graph_parser self_t;
|
||||
|
||||
graph_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::isgraph_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
graph_parser const graph_p = graph_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// lower_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct lower_parser : public char_parser<lower_parser>
|
||||
{
|
||||
typedef lower_parser self_t;
|
||||
|
||||
lower_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::islower_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
lower_parser const lower_p = lower_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// print_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct print_parser : public char_parser<print_parser>
|
||||
{
|
||||
typedef print_parser self_t;
|
||||
|
||||
print_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::isprint_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
print_parser const print_p = print_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// punct_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct punct_parser : public char_parser<punct_parser>
|
||||
{
|
||||
typedef punct_parser self_t;
|
||||
|
||||
punct_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::ispunct_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
punct_parser const punct_p = punct_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// blank_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct blank_parser : public char_parser<blank_parser>
|
||||
{
|
||||
typedef blank_parser self_t;
|
||||
|
||||
blank_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::isblank_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
blank_parser const blank_p = blank_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// space_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct space_parser : public char_parser<space_parser>
|
||||
{
|
||||
typedef space_parser self_t;
|
||||
|
||||
space_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::isspace_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
space_parser const space_p = space_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// upper_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct upper_parser : public char_parser<upper_parser>
|
||||
{
|
||||
typedef upper_parser self_t;
|
||||
|
||||
upper_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::isupper_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
upper_parser const upper_p = upper_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// xdigit_parser class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct xdigit_parser : public char_parser<xdigit_parser>
|
||||
{
|
||||
typedef xdigit_parser self_t;
|
||||
|
||||
xdigit_parser() {}
|
||||
|
||||
template <typename CharT>
|
||||
bool test(CharT ch) const
|
||||
{
|
||||
return impl::isxdigit_(ch);
|
||||
}
|
||||
};
|
||||
|
||||
xdigit_parser const xdigit_p = xdigit_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// eol_parser class (contributed by Martin Wille)
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct eol_parser : public parser<eol_parser>
|
||||
{
|
||||
typedef eol_parser self_t;
|
||||
|
||||
eol_parser() {}
|
||||
|
||||
template <typename ScannerT>
|
||||
typename parser_result<self_t, ScannerT>::type
|
||||
parse(ScannerT const& scan) const
|
||||
{
|
||||
typename ScannerT::iterator_t save = scan.first;
|
||||
std::size_t len = 0;
|
||||
|
||||
if (!scan.at_end() && *scan == '\r') // CR
|
||||
{
|
||||
++scan.first;
|
||||
++len;
|
||||
}
|
||||
|
||||
// Don't call skipper here
|
||||
if (scan.first != scan.last && *scan == '\n') // LF
|
||||
{
|
||||
++scan.first;
|
||||
++len;
|
||||
}
|
||||
|
||||
if (len)
|
||||
return scan.create_match(len, nil_t(), save, scan.first);
|
||||
return scan.no_match();
|
||||
}
|
||||
};
|
||||
|
||||
eol_parser const eol_p = eol_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// end_parser class (suggested by Markus Schoepflin)
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
struct end_parser : public parser<end_parser>
|
||||
{
|
||||
typedef end_parser self_t;
|
||||
|
||||
end_parser() {}
|
||||
|
||||
template <typename ScannerT>
|
||||
typename parser_result<self_t, ScannerT>::type
|
||||
parse(ScannerT const& scan) const
|
||||
{
|
||||
if (scan.at_end())
|
||||
return scan.empty_match();
|
||||
return scan.no_match();
|
||||
}
|
||||
};
|
||||
|
||||
end_parser const end_p = end_parser();
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// the pizza_p parser :-)
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
inline strlit<char const*> const
|
||||
pizza_p(char const* your_favorite_pizza)
|
||||
{
|
||||
return your_favorite_pizza;
|
||||
}
|
||||
|
||||
BOOST_SPIRIT_CLASSIC_NAMESPACE_END
|
||||
|
||||
}} // namespace BOOST_SPIRIT_CLASSIC_NS
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning (pop)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,197 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 1998-2003 Joel de Guzman
|
||||
http://spirit.sourceforge.net/
|
||||
|
||||
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_SPIRIT_SKIPPER_HPP)
|
||||
#define BOOST_SPIRIT_SKIPPER_HPP
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#include <cctype>
|
||||
|
||||
#include <boost/spirit/home/classic/namespace.hpp>
|
||||
#include <boost/spirit/home/classic/core/scanner/scanner.hpp>
|
||||
#include <boost/spirit/home/classic/core/primitives/impl/primitives.ipp>
|
||||
|
||||
#include <boost/spirit/home/classic/core/scanner/skipper_fwd.hpp>
|
||||
|
||||
namespace boost { namespace spirit {
|
||||
|
||||
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// skipper_iteration_policy class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename BaseT>
|
||||
struct skipper_iteration_policy : public BaseT
|
||||
{
|
||||
typedef BaseT base_t;
|
||||
|
||||
skipper_iteration_policy()
|
||||
: BaseT() {}
|
||||
|
||||
template <typename PolicyT>
|
||||
skipper_iteration_policy(PolicyT const& other)
|
||||
: BaseT(other) {}
|
||||
|
||||
template <typename ScannerT>
|
||||
void
|
||||
advance(ScannerT const& scan) const
|
||||
{
|
||||
BaseT::advance(scan);
|
||||
scan.skip(scan);
|
||||
}
|
||||
|
||||
template <typename ScannerT>
|
||||
bool
|
||||
at_end(ScannerT const& scan) const
|
||||
{
|
||||
scan.skip(scan);
|
||||
return BaseT::at_end(scan);
|
||||
}
|
||||
|
||||
template <typename ScannerT>
|
||||
void
|
||||
skip(ScannerT const& scan) const
|
||||
{
|
||||
while (!BaseT::at_end(scan) && impl::isspace_(BaseT::get(scan)))
|
||||
BaseT::advance(scan);
|
||||
}
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// no_skipper_iteration_policy class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename BaseT>
|
||||
struct no_skipper_iteration_policy : public BaseT
|
||||
{
|
||||
typedef BaseT base_t;
|
||||
|
||||
no_skipper_iteration_policy()
|
||||
: BaseT() {}
|
||||
|
||||
template <typename PolicyT>
|
||||
no_skipper_iteration_policy(PolicyT const& other)
|
||||
: BaseT(other) {}
|
||||
|
||||
template <typename ScannerT>
|
||||
void
|
||||
skip(ScannerT const& /*scan*/) const {}
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// skip_parser_iteration_policy class
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
namespace impl
|
||||
{
|
||||
template <typename ST, typename ScannerT, typename BaseT>
|
||||
void
|
||||
skipper_skip(
|
||||
ST const& s,
|
||||
ScannerT const& scan,
|
||||
skipper_iteration_policy<BaseT> const&);
|
||||
|
||||
template <typename ST, typename ScannerT, typename BaseT>
|
||||
void
|
||||
skipper_skip(
|
||||
ST const& s,
|
||||
ScannerT const& scan,
|
||||
no_skipper_iteration_policy<BaseT> const&);
|
||||
|
||||
template <typename ST, typename ScannerT>
|
||||
void
|
||||
skipper_skip(
|
||||
ST const& s,
|
||||
ScannerT const& scan,
|
||||
iteration_policy const&);
|
||||
}
|
||||
|
||||
template <typename ParserT, typename BaseT>
|
||||
class skip_parser_iteration_policy : public skipper_iteration_policy<BaseT>
|
||||
{
|
||||
public:
|
||||
|
||||
typedef skipper_iteration_policy<BaseT> base_t;
|
||||
|
||||
skip_parser_iteration_policy(
|
||||
ParserT const& skip_parser,
|
||||
base_t const& base = base_t())
|
||||
: base_t(base), subject(skip_parser) {}
|
||||
|
||||
template <typename PolicyT>
|
||||
skip_parser_iteration_policy(PolicyT const& other)
|
||||
: base_t(other), subject(other.skipper()) {}
|
||||
|
||||
template <typename ScannerT>
|
||||
void
|
||||
skip(ScannerT const& scan) const
|
||||
{
|
||||
impl::skipper_skip(subject, scan, scan);
|
||||
}
|
||||
|
||||
ParserT const&
|
||||
skipper() const
|
||||
{
|
||||
return subject;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
ParserT const& subject;
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Free parse functions using the skippers
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
template <typename IteratorT, typename ParserT, typename SkipT>
|
||||
parse_info<IteratorT>
|
||||
parse(
|
||||
IteratorT const& first,
|
||||
IteratorT const& last,
|
||||
parser<ParserT> const& p,
|
||||
parser<SkipT> const& skip);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Parse function for null terminated strings using the skippers
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
template <typename CharT, typename ParserT, typename SkipT>
|
||||
parse_info<CharT const*>
|
||||
parse(
|
||||
CharT const* str,
|
||||
parser<ParserT> const& p,
|
||||
parser<SkipT> const& skip);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// phrase_scanner_t and wide_phrase_scanner_t
|
||||
//
|
||||
// The most common scanners. Use these typedefs when you need
|
||||
// a scanner that skips white spaces.
|
||||
//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
typedef skipper_iteration_policy<> iter_policy_t;
|
||||
typedef scanner_policies<iter_policy_t> scanner_policies_t;
|
||||
typedef scanner<char const*, scanner_policies_t> phrase_scanner_t;
|
||||
typedef scanner<wchar_t const*, scanner_policies_t> wide_phrase_scanner_t;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
BOOST_SPIRIT_CLASSIC_NAMESPACE_END
|
||||
|
||||
}} // namespace BOOST_SPIRIT_CLASSIC_NS
|
||||
|
||||
#include <boost/spirit/home/classic/core/scanner/impl/skipper.ipp>
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,584 @@
|
||||
//---------------------------------------------------------------------------//
|
||||
// Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0
|
||||
// See accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt
|
||||
//
|
||||
// See http://boostorg.github.com/compute for more information.
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
#ifndef BOOST_COMPUTE_DEVICE_HPP
|
||||
#define BOOST_COMPUTE_DEVICE_HPP
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include <boost/algorithm/string/split.hpp>
|
||||
#include <boost/algorithm/string/classification.hpp>
|
||||
|
||||
#include <boost/compute/config.hpp>
|
||||
#include <boost/compute/exception.hpp>
|
||||
#include <boost/compute/types/fundamental.hpp>
|
||||
#include <boost/compute/detail/get_object_info.hpp>
|
||||
#include <boost/compute/detail/assert_cl_success.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace compute {
|
||||
|
||||
class platform;
|
||||
|
||||
/// \class device
|
||||
/// \brief A compute device.
|
||||
///
|
||||
/// Typical compute devices include GPUs and multi-core CPUs. A list
|
||||
/// of all compute devices available on a platform can be obtained
|
||||
/// via the platform::devices() method.
|
||||
///
|
||||
/// The default compute device for the system can be obtained with
|
||||
/// the system::default_device() method. For example:
|
||||
///
|
||||
/// \snippet test/test_device.cpp default_gpu
|
||||
///
|
||||
/// \see platform, context, command_queue
|
||||
class device
|
||||
{
|
||||
public:
|
||||
enum type {
|
||||
cpu = CL_DEVICE_TYPE_CPU,
|
||||
gpu = CL_DEVICE_TYPE_GPU,
|
||||
accelerator = CL_DEVICE_TYPE_ACCELERATOR
|
||||
};
|
||||
|
||||
/// Creates a null device object.
|
||||
device()
|
||||
: m_id(0)
|
||||
{
|
||||
}
|
||||
|
||||
/// Creates a new device object for \p id. If \p retain is \c true,
|
||||
/// the reference count for the device will be incremented.
|
||||
explicit device(cl_device_id id, bool retain = true)
|
||||
: m_id(id)
|
||||
{
|
||||
#ifdef CL_VERSION_1_2
|
||||
if(m_id && retain && is_subdevice()){
|
||||
clRetainDevice(m_id);
|
||||
}
|
||||
#else
|
||||
(void) retain;
|
||||
#endif
|
||||
}
|
||||
|
||||
/// Creates a new device object as a copy of \p other.
|
||||
device(const device &other)
|
||||
: m_id(other.m_id)
|
||||
{
|
||||
#ifdef CL_VERSION_1_2
|
||||
if(m_id && is_subdevice()){
|
||||
clRetainDevice(m_id);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// Copies the device from \p other to \c *this.
|
||||
device& operator=(const device &other)
|
||||
{
|
||||
if(this != &other){
|
||||
#ifdef CL_VERSION_1_2
|
||||
if(m_id && is_subdevice()){
|
||||
clReleaseDevice(m_id);
|
||||
}
|
||||
#endif
|
||||
|
||||
m_id = other.m_id;
|
||||
|
||||
#ifdef CL_VERSION_1_2
|
||||
if(m_id && is_subdevice()){
|
||||
clRetainDevice(m_id);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
#ifndef BOOST_COMPUTE_NO_RVALUE_REFERENCES
|
||||
/// Move-constructs a new device object from \p other.
|
||||
device(device&& other) BOOST_NOEXCEPT
|
||||
: m_id(other.m_id)
|
||||
{
|
||||
other.m_id = 0;
|
||||
}
|
||||
|
||||
/// Move-assigns the device from \p other to \c *this.
|
||||
device& operator=(device&& other) BOOST_NOEXCEPT
|
||||
{
|
||||
#ifdef CL_VERSION_1_2
|
||||
if(m_id && is_subdevice()){
|
||||
clReleaseDevice(m_id);
|
||||
}
|
||||
#endif
|
||||
|
||||
m_id = other.m_id;
|
||||
other.m_id = 0;
|
||||
|
||||
return *this;
|
||||
}
|
||||
#endif // BOOST_COMPUTE_NO_RVALUE_REFERENCES
|
||||
|
||||
/// Destroys the device object.
|
||||
~device()
|
||||
{
|
||||
#ifdef CL_VERSION_1_2
|
||||
if(m_id && is_subdevice()){
|
||||
BOOST_COMPUTE_ASSERT_CL_SUCCESS(
|
||||
clReleaseDevice(m_id)
|
||||
);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// Returns the ID of the device.
|
||||
cl_device_id id() const
|
||||
{
|
||||
return m_id;
|
||||
}
|
||||
|
||||
/// Returns a reference to the underlying OpenCL device id.
|
||||
cl_device_id& get() const
|
||||
{
|
||||
return const_cast<cl_device_id&>(m_id);
|
||||
}
|
||||
|
||||
/// Returns the type of the device.
|
||||
cl_device_type type() const
|
||||
{
|
||||
return get_info<cl_device_type>(CL_DEVICE_TYPE);
|
||||
}
|
||||
|
||||
#ifdef BOOST_COMPUTE_DOXYGEN_INVOKED
|
||||
/// Returns the platform for the device.
|
||||
platform platform() const;
|
||||
#else
|
||||
boost::compute::platform platform() const;
|
||||
#endif
|
||||
|
||||
/// Returns the name of the device.
|
||||
std::string name() const
|
||||
{
|
||||
return get_info<std::string>(CL_DEVICE_NAME);
|
||||
}
|
||||
|
||||
/// Returns the name of the vendor for the device.
|
||||
std::string vendor() const
|
||||
{
|
||||
return get_info<std::string>(CL_DEVICE_VENDOR);
|
||||
}
|
||||
|
||||
/// Returns the device profile string.
|
||||
std::string profile() const
|
||||
{
|
||||
return get_info<std::string>(CL_DEVICE_PROFILE);
|
||||
}
|
||||
|
||||
/// Returns the device version string.
|
||||
std::string version() const
|
||||
{
|
||||
return get_info<std::string>(CL_DEVICE_VERSION);
|
||||
}
|
||||
|
||||
/// Returns the driver version string.
|
||||
std::string driver_version() const
|
||||
{
|
||||
return get_info<std::string>(CL_DRIVER_VERSION);
|
||||
}
|
||||
|
||||
/// Returns a list of extensions supported by the device.
|
||||
std::vector<std::string> extensions() const
|
||||
{
|
||||
std::string extensions_string =
|
||||
get_info<std::string>(CL_DEVICE_EXTENSIONS);
|
||||
std::vector<std::string> extensions_vector;
|
||||
boost::split(extensions_vector,
|
||||
extensions_string,
|
||||
boost::is_any_of("\t "),
|
||||
boost::token_compress_on);
|
||||
return extensions_vector;
|
||||
}
|
||||
|
||||
/// Returns \c true if the device supports the extension with
|
||||
/// \p name.
|
||||
bool supports_extension(const std::string &name) const
|
||||
{
|
||||
const std::vector<std::string> extensions = this->extensions();
|
||||
|
||||
return std::find(
|
||||
extensions.begin(), extensions.end(), name) != extensions.end();
|
||||
}
|
||||
|
||||
/// Returns the number of address bits.
|
||||
uint_ address_bits() const
|
||||
{
|
||||
return get_info<uint_>(CL_DEVICE_ADDRESS_BITS);
|
||||
}
|
||||
|
||||
/// Returns the global memory size in bytes.
|
||||
ulong_ global_memory_size() const
|
||||
{
|
||||
return get_info<ulong_>(CL_DEVICE_GLOBAL_MEM_SIZE);
|
||||
}
|
||||
|
||||
/// Returns the local memory size in bytes.
|
||||
ulong_ local_memory_size() const
|
||||
{
|
||||
return get_info<ulong_>(CL_DEVICE_LOCAL_MEM_SIZE);
|
||||
}
|
||||
|
||||
/// Returns the clock frequency for the device's compute units.
|
||||
uint_ clock_frequency() const
|
||||
{
|
||||
return get_info<uint_>(CL_DEVICE_MAX_CLOCK_FREQUENCY);
|
||||
}
|
||||
|
||||
/// Returns the number of compute units in the device.
|
||||
uint_ compute_units() const
|
||||
{
|
||||
return get_info<uint_>(CL_DEVICE_MAX_COMPUTE_UNITS);
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
ulong_ max_memory_alloc_size() const
|
||||
{
|
||||
return get_info<ulong_>(CL_DEVICE_MAX_MEM_ALLOC_SIZE);
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
size_t max_work_group_size() const
|
||||
{
|
||||
return get_info<size_t>(CL_DEVICE_MAX_WORK_GROUP_SIZE);
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
uint_ max_work_item_dimensions() const
|
||||
{
|
||||
return get_info<uint_>(CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS);
|
||||
}
|
||||
|
||||
/// Returns the preferred vector width for type \c T.
|
||||
template<class T>
|
||||
uint_ preferred_vector_width() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// Returns the profiling timer resolution in nanoseconds.
|
||||
size_t profiling_timer_resolution() const
|
||||
{
|
||||
return get_info<size_t>(CL_DEVICE_PROFILING_TIMER_RESOLUTION);
|
||||
}
|
||||
|
||||
/// Returns \c true if the device is a sub-device.
|
||||
bool is_subdevice() const
|
||||
{
|
||||
#if defined(CL_VERSION_1_2)
|
||||
try {
|
||||
return get_info<cl_device_id>(CL_DEVICE_PARENT_DEVICE) != 0;
|
||||
}
|
||||
catch(opencl_error&){
|
||||
// the get_info() call above will throw if the device's opencl version
|
||||
// is less than 1.2 (in which case it can't be a sub-device).
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
/// Returns information about the device.
|
||||
///
|
||||
/// For example, to get the number of compute units:
|
||||
/// \code
|
||||
/// device.get_info<cl_uint>(CL_DEVICE_MAX_COMPUTE_UNITS);
|
||||
/// \endcode
|
||||
///
|
||||
/// Alternatively, the template-specialized version can be used which
|
||||
/// automatically determines the result type:
|
||||
/// \code
|
||||
/// device.get_info<CL_DEVICE_MAX_COMPUTE_UNITS>();
|
||||
/// \endcode
|
||||
///
|
||||
/// \see_opencl_ref{clGetDeviceInfo}
|
||||
template<class T>
|
||||
T get_info(cl_device_info info) const
|
||||
{
|
||||
return detail::get_object_info<T>(clGetDeviceInfo, m_id, info);
|
||||
}
|
||||
|
||||
/// \overload
|
||||
template<int Enum>
|
||||
typename detail::get_object_info_type<device, Enum>::type
|
||||
get_info() const;
|
||||
|
||||
#if defined(CL_VERSION_1_2) || defined(BOOST_COMPUTE_DOXYGEN_INVOKED)
|
||||
/// Partitions the device into multiple sub-devices according to
|
||||
/// \p properties.
|
||||
///
|
||||
/// \opencl_version_warning{1,2}
|
||||
std::vector<device>
|
||||
partition(const cl_device_partition_property *properties) const
|
||||
{
|
||||
// get sub-device count
|
||||
uint_ count = 0;
|
||||
int_ ret = clCreateSubDevices(m_id, properties, 0, 0, &count);
|
||||
if(ret != CL_SUCCESS){
|
||||
BOOST_THROW_EXCEPTION(opencl_error(ret));
|
||||
}
|
||||
|
||||
// get sub-device ids
|
||||
std::vector<cl_device_id> ids(count);
|
||||
ret = clCreateSubDevices(m_id, properties, count, &ids[0], 0);
|
||||
if(ret != CL_SUCCESS){
|
||||
BOOST_THROW_EXCEPTION(opencl_error(ret));
|
||||
}
|
||||
|
||||
// convert ids to device objects
|
||||
std::vector<device> devices(count);
|
||||
for(size_t i = 0; i < count; i++){
|
||||
devices[i] = device(ids[i], false);
|
||||
}
|
||||
|
||||
return devices;
|
||||
}
|
||||
|
||||
/// \opencl_version_warning{1,2}
|
||||
std::vector<device> partition_equally(size_t count) const
|
||||
{
|
||||
cl_device_partition_property properties[] = {
|
||||
CL_DEVICE_PARTITION_EQUALLY,
|
||||
static_cast<cl_device_partition_property>(count),
|
||||
0
|
||||
};
|
||||
|
||||
return partition(properties);
|
||||
}
|
||||
|
||||
/// \opencl_version_warning{1,2}
|
||||
std::vector<device>
|
||||
partition_by_counts(const std::vector<size_t> &counts) const
|
||||
{
|
||||
std::vector<cl_device_partition_property> properties;
|
||||
|
||||
properties.push_back(CL_DEVICE_PARTITION_BY_COUNTS);
|
||||
for(size_t i = 0; i < counts.size(); i++){
|
||||
properties.push_back(
|
||||
static_cast<cl_device_partition_property>(counts[i]));
|
||||
}
|
||||
properties.push_back(CL_DEVICE_PARTITION_BY_COUNTS_LIST_END);
|
||||
properties.push_back(0);
|
||||
|
||||
return partition(&properties[0]);
|
||||
}
|
||||
|
||||
/// \opencl_version_warning{1,2}
|
||||
std::vector<device>
|
||||
partition_by_affinity_domain(cl_device_affinity_domain domain) const
|
||||
{
|
||||
cl_device_partition_property properties[] = {
|
||||
CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN,
|
||||
static_cast<cl_device_partition_property>(domain),
|
||||
0
|
||||
};
|
||||
|
||||
return partition(properties);
|
||||
}
|
||||
#endif // CL_VERSION_1_2
|
||||
|
||||
/// Returns \c true if the device is the same at \p other.
|
||||
bool operator==(const device &other) const
|
||||
{
|
||||
return m_id == other.m_id;
|
||||
}
|
||||
|
||||
/// Returns \c true if the device is different from \p other.
|
||||
bool operator!=(const device &other) const
|
||||
{
|
||||
return m_id != other.m_id;
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
bool check_version(int major, int minor) const
|
||||
{
|
||||
std::stringstream stream;
|
||||
stream << version();
|
||||
|
||||
int actual_major, actual_minor;
|
||||
stream.ignore(7); // 'OpenCL '
|
||||
stream >> actual_major;
|
||||
stream.ignore(1); // '.'
|
||||
stream >> actual_minor;
|
||||
|
||||
return actual_major > major ||
|
||||
(actual_major == major && actual_minor >= minor);
|
||||
}
|
||||
|
||||
private:
|
||||
cl_device_id m_id;
|
||||
};
|
||||
|
||||
/// \internal_
|
||||
template<>
|
||||
inline uint_ device::preferred_vector_width<short_>() const
|
||||
{
|
||||
return get_info<uint_>(CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT);
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
template<>
|
||||
inline uint_ device::preferred_vector_width<int_>() const
|
||||
{
|
||||
return get_info<uint_>(CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT);
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
template<>
|
||||
inline uint_ device::preferred_vector_width<long_>() const
|
||||
{
|
||||
return get_info<uint_>(CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG);
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
template<>
|
||||
inline uint_ device::preferred_vector_width<float_>() const
|
||||
{
|
||||
return get_info<uint_>(CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT);
|
||||
}
|
||||
|
||||
/// \internal_
|
||||
template<>
|
||||
inline uint_ device::preferred_vector_width<double_>() const
|
||||
{
|
||||
return get_info<uint_>(CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE);
|
||||
}
|
||||
|
||||
/// \internal_ define get_info() specializations for device
|
||||
BOOST_COMPUTE_DETAIL_DEFINE_GET_INFO_SPECIALIZATIONS(device,
|
||||
((cl_uint, CL_DEVICE_ADDRESS_BITS))
|
||||
((bool, CL_DEVICE_AVAILABLE))
|
||||
((bool, CL_DEVICE_COMPILER_AVAILABLE))
|
||||
((bool, CL_DEVICE_ENDIAN_LITTLE))
|
||||
((bool, CL_DEVICE_ERROR_CORRECTION_SUPPORT))
|
||||
((cl_device_exec_capabilities, CL_DEVICE_EXECUTION_CAPABILITIES))
|
||||
((std::string, CL_DEVICE_EXTENSIONS))
|
||||
((cl_ulong, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE))
|
||||
((cl_device_mem_cache_type, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE))
|
||||
((cl_ulong, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE))
|
||||
((cl_ulong, CL_DEVICE_GLOBAL_MEM_SIZE))
|
||||
((bool, CL_DEVICE_IMAGE_SUPPORT))
|
||||
((size_t, CL_DEVICE_IMAGE2D_MAX_HEIGHT))
|
||||
((size_t, CL_DEVICE_IMAGE2D_MAX_WIDTH))
|
||||
((size_t, CL_DEVICE_IMAGE3D_MAX_DEPTH))
|
||||
((size_t, CL_DEVICE_IMAGE3D_MAX_HEIGHT))
|
||||
((size_t, CL_DEVICE_IMAGE3D_MAX_WIDTH))
|
||||
((cl_ulong, CL_DEVICE_LOCAL_MEM_SIZE))
|
||||
((cl_device_local_mem_type, CL_DEVICE_LOCAL_MEM_TYPE))
|
||||
((cl_uint, CL_DEVICE_MAX_CLOCK_FREQUENCY))
|
||||
((cl_uint, CL_DEVICE_MAX_COMPUTE_UNITS))
|
||||
((cl_uint, CL_DEVICE_MAX_CONSTANT_ARGS))
|
||||
((cl_ulong, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE))
|
||||
((cl_ulong, CL_DEVICE_MAX_MEM_ALLOC_SIZE))
|
||||
((size_t, CL_DEVICE_MAX_PARAMETER_SIZE))
|
||||
((cl_uint, CL_DEVICE_MAX_READ_IMAGE_ARGS))
|
||||
((cl_uint, CL_DEVICE_MAX_SAMPLERS))
|
||||
((size_t, CL_DEVICE_MAX_WORK_GROUP_SIZE))
|
||||
((cl_uint, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS))
|
||||
((std::vector<size_t>, CL_DEVICE_MAX_WORK_ITEM_SIZES))
|
||||
((cl_uint, CL_DEVICE_MAX_WRITE_IMAGE_ARGS))
|
||||
((cl_uint, CL_DEVICE_MEM_BASE_ADDR_ALIGN))
|
||||
((cl_uint, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE))
|
||||
((std::string, CL_DEVICE_NAME))
|
||||
((cl_platform_id, CL_DEVICE_PLATFORM))
|
||||
((cl_uint, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR))
|
||||
((cl_uint, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT))
|
||||
((cl_uint, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT))
|
||||
((cl_uint, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG))
|
||||
((cl_uint, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT))
|
||||
((cl_uint, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE))
|
||||
((std::string, CL_DEVICE_PROFILE))
|
||||
((size_t, CL_DEVICE_PROFILING_TIMER_RESOLUTION))
|
||||
((cl_command_queue_properties, CL_DEVICE_QUEUE_PROPERTIES))
|
||||
((cl_device_fp_config, CL_DEVICE_SINGLE_FP_CONFIG))
|
||||
((cl_device_type, CL_DEVICE_TYPE))
|
||||
((std::string, CL_DEVICE_VENDOR))
|
||||
((cl_uint, CL_DEVICE_VENDOR_ID))
|
||||
((std::string, CL_DEVICE_VERSION))
|
||||
((std::string, CL_DRIVER_VERSION))
|
||||
)
|
||||
|
||||
#ifdef CL_DEVICE_DOUBLE_FP_CONFIG
|
||||
BOOST_COMPUTE_DETAIL_DEFINE_GET_INFO_SPECIALIZATIONS(device,
|
||||
((cl_device_fp_config, CL_DEVICE_DOUBLE_FP_CONFIG))
|
||||
)
|
||||
#endif
|
||||
|
||||
#ifdef CL_DEVICE_HALF_FP_CONFIG
|
||||
BOOST_COMPUTE_DETAIL_DEFINE_GET_INFO_SPECIALIZATIONS(device,
|
||||
((cl_device_fp_config, CL_DEVICE_HALF_FP_CONFIG))
|
||||
)
|
||||
#endif
|
||||
|
||||
#ifdef CL_VERSION_1_1
|
||||
BOOST_COMPUTE_DETAIL_DEFINE_GET_INFO_SPECIALIZATIONS(device,
|
||||
((bool, CL_DEVICE_HOST_UNIFIED_MEMORY))
|
||||
((cl_uint, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR))
|
||||
((cl_uint, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT))
|
||||
((cl_uint, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT))
|
||||
((cl_uint, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG))
|
||||
((cl_uint, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT))
|
||||
((cl_uint, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE))
|
||||
((std::string, CL_DEVICE_OPENCL_C_VERSION))
|
||||
)
|
||||
#endif // CL_VERSION_1_1
|
||||
|
||||
#ifdef CL_VERSION_1_2
|
||||
BOOST_COMPUTE_DETAIL_DEFINE_GET_INFO_SPECIALIZATIONS(device,
|
||||
((std::string, CL_DEVICE_BUILT_IN_KERNELS))
|
||||
((bool, CL_DEVICE_LINKER_AVAILABLE))
|
||||
((cl_device_id, CL_DEVICE_PARENT_DEVICE))
|
||||
((cl_uint, CL_DEVICE_PARTITION_MAX_SUB_DEVICES))
|
||||
((cl_device_partition_property, CL_DEVICE_PARTITION_PROPERTIES))
|
||||
((cl_device_affinity_domain, CL_DEVICE_PARTITION_AFFINITY_DOMAIN))
|
||||
((cl_device_partition_property, CL_DEVICE_PARTITION_TYPE))
|
||||
((size_t, CL_DEVICE_PRINTF_BUFFER_SIZE))
|
||||
((bool, CL_DEVICE_PREFERRED_INTEROP_USER_SYNC))
|
||||
((cl_uint, CL_DEVICE_REFERENCE_COUNT))
|
||||
)
|
||||
#endif // CL_VERSION_1_2
|
||||
|
||||
#ifdef CL_VERSION_2_0
|
||||
BOOST_COMPUTE_DETAIL_DEFINE_GET_INFO_SPECIALIZATIONS(device,
|
||||
((size_t, CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE))
|
||||
((size_t, CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE))
|
||||
((cl_uint, CL_DEVICE_MAX_ON_DEVICE_EVENTS))
|
||||
((cl_uint, CL_DEVICE_MAX_ON_DEVICE_QUEUES))
|
||||
((cl_uint, CL_DEVICE_MAX_PIPE_ARGS))
|
||||
((cl_uint, CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS))
|
||||
((cl_uint, CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS))
|
||||
((cl_uint, CL_DEVICE_PIPE_MAX_PACKET_SIZE))
|
||||
((cl_uint, CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT))
|
||||
((cl_uint, CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT))
|
||||
((cl_uint, CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT))
|
||||
((cl_uint, CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE))
|
||||
((cl_uint, CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE))
|
||||
((cl_command_queue_properties, CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES))
|
||||
((cl_device_svm_capabilities, CL_DEVICE_SVM_CAPABILITIES))
|
||||
((cl_uint, CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT))
|
||||
((cl_uint, CL_DEVICE_IMAGE_PITCH_ALIGNMENT))
|
||||
)
|
||||
#endif // CL_VERSION_2_0
|
||||
|
||||
} // end compute namespace
|
||||
} // end boost namespace
|
||||
|
||||
#endif // BOOST_COMPUTE_DEVICE_HPP
|
||||
@@ -0,0 +1,114 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gaztanaga 2005-2012. 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/interprocess for documentation.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef BOOST_INTERPROCESS_POSIX_NAMED_MUTEX_HPP
|
||||
#define BOOST_INTERPROCESS_POSIX_NAMED_MUTEX_HPP
|
||||
|
||||
#ifndef BOOST_CONFIG_HPP
|
||||
# include <boost/config.hpp>
|
||||
#endif
|
||||
#
|
||||
#if defined(BOOST_HAS_PRAGMA_ONCE)
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
#include <boost/interprocess/detail/config_begin.hpp>
|
||||
#include <boost/interprocess/detail/workaround.hpp>
|
||||
#include <boost/interprocess/creation_tags.hpp>
|
||||
#include <boost/interprocess/exceptions.hpp>
|
||||
#include <boost/interprocess/detail/interprocess_tester.hpp>
|
||||
#include <boost/interprocess/permissions.hpp>
|
||||
|
||||
#include <boost/interprocess/sync/posix/named_semaphore.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace interprocess {
|
||||
namespace ipcdetail {
|
||||
|
||||
class named_condition;
|
||||
|
||||
class posix_named_mutex
|
||||
{
|
||||
#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
|
||||
|
||||
posix_named_mutex();
|
||||
posix_named_mutex(const posix_named_mutex &);
|
||||
posix_named_mutex &operator=(const posix_named_mutex &);
|
||||
friend class named_condition;
|
||||
#endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
|
||||
|
||||
public:
|
||||
posix_named_mutex(create_only_t create_only, const char *name, const permissions &perm = permissions());
|
||||
|
||||
posix_named_mutex(open_or_create_t open_or_create, const char *name, const permissions &perm = permissions());
|
||||
|
||||
posix_named_mutex(open_only_t open_only, const char *name);
|
||||
|
||||
~posix_named_mutex();
|
||||
|
||||
void unlock();
|
||||
void lock();
|
||||
bool try_lock();
|
||||
bool timed_lock(const boost::posix_time::ptime &abs_time);
|
||||
static bool remove(const char *name);
|
||||
|
||||
#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
|
||||
private:
|
||||
friend class interprocess_tester;
|
||||
void dont_close_on_destruction();
|
||||
|
||||
posix_named_semaphore m_sem;
|
||||
#endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
|
||||
};
|
||||
|
||||
#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
|
||||
|
||||
inline posix_named_mutex::posix_named_mutex(create_only_t, const char *name, const permissions &perm)
|
||||
: m_sem(create_only, name, 1, perm)
|
||||
{}
|
||||
|
||||
inline posix_named_mutex::posix_named_mutex(open_or_create_t, const char *name, const permissions &perm)
|
||||
: m_sem(open_or_create, name, 1, perm)
|
||||
{}
|
||||
|
||||
inline posix_named_mutex::posix_named_mutex(open_only_t, const char *name)
|
||||
: m_sem(open_only, name)
|
||||
{}
|
||||
|
||||
inline void posix_named_mutex::dont_close_on_destruction()
|
||||
{ interprocess_tester::dont_close_on_destruction(m_sem); }
|
||||
|
||||
inline posix_named_mutex::~posix_named_mutex()
|
||||
{}
|
||||
|
||||
inline void posix_named_mutex::lock()
|
||||
{ m_sem.wait(); }
|
||||
|
||||
inline void posix_named_mutex::unlock()
|
||||
{ m_sem.post(); }
|
||||
|
||||
inline bool posix_named_mutex::try_lock()
|
||||
{ return m_sem.try_wait(); }
|
||||
|
||||
inline bool posix_named_mutex::timed_lock(const boost::posix_time::ptime &abs_time)
|
||||
{ return m_sem.timed_wait(abs_time); }
|
||||
|
||||
inline bool posix_named_mutex::remove(const char *name)
|
||||
{ return posix_named_semaphore::remove(name); }
|
||||
|
||||
#endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
|
||||
|
||||
} //namespace ipcdetail {
|
||||
} //namespace interprocess {
|
||||
} //namespace boost {
|
||||
|
||||
#include <boost/interprocess/detail/config_end.hpp>
|
||||
|
||||
#endif //BOOST_INTERPROCESS_POSIX_NAMED_MUTEX_HPP
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,33 @@
|
||||
|
||||
// (C) Copyright Steve Cleary, Beman Dawes, Howard Hinnant & John Maddock 2000.
|
||||
// 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_IS_STATELESS_HPP_INCLUDED
|
||||
#define BOOST_TT_IS_STATELESS_HPP_INCLUDED
|
||||
|
||||
#include <boost/type_traits/has_trivial_constructor.hpp>
|
||||
#include <boost/type_traits/has_trivial_copy.hpp>
|
||||
#include <boost/type_traits/has_trivial_destructor.hpp>
|
||||
#include <boost/type_traits/is_class.hpp>
|
||||
#include <boost/type_traits/is_empty.hpp>
|
||||
#include <boost/config.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
template <typename T>
|
||||
struct is_stateless
|
||||
: public integral_constant<bool,
|
||||
(::boost::has_trivial_constructor<T>::value
|
||||
&& ::boost::has_trivial_copy<T>::value
|
||||
&& ::boost::has_trivial_destructor<T>::value
|
||||
&& ::boost::is_class<T>::value
|
||||
&& ::boost::is_empty<T>::value)>
|
||||
{};
|
||||
|
||||
} // namespace boost
|
||||
|
||||
#endif // BOOST_TT_IS_STATELESS_HPP_INCLUDED
|
||||
@@ -0,0 +1,43 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 1999-2003 Jaakko Jarvi
|
||||
Copyright (c) 1999-2003 Jeremiah Willcock
|
||||
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(BOOST_IN_05042005_0120)
|
||||
#define BOOST_IN_05042005_0120
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <istream>
|
||||
#include <boost/fusion/sequence/io/detail/in.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
template <typename Sequence>
|
||||
inline std::istream&
|
||||
in(std::istream& is, Sequence& seq)
|
||||
{
|
||||
detail::read_sequence(is, seq);
|
||||
return is;
|
||||
}
|
||||
|
||||
namespace operators
|
||||
{
|
||||
template <typename Sequence>
|
||||
inline typename
|
||||
boost::enable_if<
|
||||
fusion::traits::is_sequence<Sequence>
|
||||
, std::istream&
|
||||
>::type
|
||||
operator>>(std::istream& is, Sequence& seq)
|
||||
{
|
||||
return fusion::in(is, seq);
|
||||
}
|
||||
}
|
||||
using operators::operator>>;
|
||||
}}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user