Initial Commit
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
// Boost.Range library
|
||||
//
|
||||
// Copyright Neil Groves 2010. 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)
|
||||
//
|
||||
// For more information, see http://www.boost.org/libs/range/
|
||||
//
|
||||
// Acknowledgments:
|
||||
// Ticket #8341: Arno Schoedl - improved handling of has_range_iterator upon
|
||||
// use-cases where T was const.
|
||||
#ifndef BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED
|
||||
#define BOOST_RANGE_HAS_ITERATOR_HPP_INCLUDED
|
||||
|
||||
#include <boost/mpl/bool.hpp>
|
||||
#include <boost/mpl/eval_if.hpp>
|
||||
#include <boost/mpl/has_xxx.hpp>
|
||||
#include <boost/range/iterator.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
|
||||
namespace boost
|
||||
{
|
||||
namespace range_detail
|
||||
{
|
||||
BOOST_MPL_HAS_XXX_TRAIT_DEF(type)
|
||||
|
||||
template<class T, class Enabler = void>
|
||||
struct has_range_iterator_impl
|
||||
: boost::mpl::false_
|
||||
{
|
||||
};
|
||||
|
||||
template<class T>
|
||||
struct has_range_iterator_impl<
|
||||
T,
|
||||
BOOST_DEDUCED_TYPENAME ::boost::enable_if<
|
||||
BOOST_DEDUCED_TYPENAME mpl::eval_if<is_const<T>,
|
||||
has_type<range_const_iterator<
|
||||
BOOST_DEDUCED_TYPENAME remove_const<T>::type> >,
|
||||
has_type<range_mutable_iterator<T> >
|
||||
>::type
|
||||
>::type
|
||||
>
|
||||
: boost::mpl::true_
|
||||
{
|
||||
};
|
||||
|
||||
template<class T, class Enabler = void>
|
||||
struct has_range_const_iterator_impl
|
||||
: boost::mpl::false_
|
||||
{
|
||||
};
|
||||
|
||||
template<class T>
|
||||
struct has_range_const_iterator_impl<
|
||||
T,
|
||||
BOOST_DEDUCED_TYPENAME ::boost::enable_if<
|
||||
has_type<range_const_iterator<T> >
|
||||
>::type
|
||||
>
|
||||
: boost::mpl::true_
|
||||
{
|
||||
};
|
||||
|
||||
} // namespace range_detail
|
||||
|
||||
template<class T>
|
||||
struct has_range_iterator
|
||||
: range_detail::has_range_iterator_impl<
|
||||
BOOST_DEDUCED_TYPENAME remove_reference<T>::type>
|
||||
{};
|
||||
|
||||
template<class T>
|
||||
struct has_range_const_iterator
|
||||
: range_detail::has_range_const_iterator_impl<
|
||||
BOOST_DEDUCED_TYPENAME remove_reference<T>::type>
|
||||
{};
|
||||
} // namespace boost
|
||||
|
||||
#endif // include guard
|
||||
|
||||
@@ -0,0 +1,143 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
// Copyright (C) 2002-2006 Marcin Kalicinski
|
||||
// Copyright (C) 2009 Sebastian Redl
|
||||
//
|
||||
// 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)
|
||||
//
|
||||
// For more information, see www.boost.org
|
||||
// ----------------------------------------------------------------------------
|
||||
#ifndef BOOST_PROPERTY_TREE_PTREE_FWD_HPP_INCLUDED
|
||||
#define BOOST_PROPERTY_TREE_PTREE_FWD_HPP_INCLUDED
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/optional/optional_fwd.hpp>
|
||||
#include <boost/throw_exception.hpp>
|
||||
#include <functional> // for std::less
|
||||
#include <memory> // for std::allocator
|
||||
#include <string>
|
||||
|
||||
namespace boost { namespace property_tree
|
||||
{
|
||||
namespace detail {
|
||||
template <typename T> struct less_nocase;
|
||||
}
|
||||
|
||||
// Classes
|
||||
|
||||
template < class Key, class Data, class KeyCompare = std::less<Key> >
|
||||
class basic_ptree;
|
||||
|
||||
template <typename T>
|
||||
struct id_translator;
|
||||
|
||||
template <typename String, typename Translator>
|
||||
class string_path;
|
||||
|
||||
// Texas-style concepts for documentation only.
|
||||
#if 0
|
||||
concept PropertyTreePath<class Path> {
|
||||
// The key type for which this path works.
|
||||
typename key_type;
|
||||
// Return the key that the first segment of the path names.
|
||||
// Split the head off the state.
|
||||
key_type Path::reduce();
|
||||
|
||||
// Return true if the path is empty.
|
||||
bool Path::empty() const;
|
||||
|
||||
// Return true if the path contains a single element.
|
||||
bool Path::single() const;
|
||||
|
||||
// Dump as a std::string, for exception messages.
|
||||
std::string Path::dump() const;
|
||||
}
|
||||
concept PropertyTreeKey<class Key> {
|
||||
PropertyTreePath path;
|
||||
requires SameType<Key, PropertyTreePath<path>::key_type>;
|
||||
}
|
||||
concept PropertyTreeTranslator<class Tr> {
|
||||
typename internal_type;
|
||||
typename external_type;
|
||||
|
||||
boost::optional<external_type> Tr::get_value(internal_type);
|
||||
boost::optional<internal_type> Tr::put_value(external_type);
|
||||
}
|
||||
#endif
|
||||
/// If you want to use a custom key type, specialize this struct for it
|
||||
/// and give it a 'type' typedef that specifies your path type. The path
|
||||
/// type must conform to the Path concept described in the documentation.
|
||||
/// This is already specialized for std::basic_string.
|
||||
template <typename Key>
|
||||
struct path_of;
|
||||
|
||||
/// Specialize this struct to specify a default translator between the data
|
||||
/// in a tree whose data_type is Internal, and the external data_type
|
||||
/// specified in a get_value, get, put_value or put operation.
|
||||
/// This is already specialized for Internal being std::basic_string.
|
||||
template <typename Internal, typename External>
|
||||
struct translator_between;
|
||||
|
||||
class ptree_error;
|
||||
class ptree_bad_data;
|
||||
class ptree_bad_path;
|
||||
|
||||
// Typedefs
|
||||
|
||||
/** Implements a path using a std::string as the key. */
|
||||
typedef string_path<std::string, id_translator<std::string> > path;
|
||||
|
||||
/**
|
||||
* A property tree with std::string for key and data, and default
|
||||
* comparison.
|
||||
*/
|
||||
typedef basic_ptree<std::string, std::string> ptree;
|
||||
|
||||
/**
|
||||
* A property tree with std::string for key and data, and case-insensitive
|
||||
* comparison.
|
||||
*/
|
||||
typedef basic_ptree<std::string, std::string,
|
||||
detail::less_nocase<std::string> >
|
||||
iptree;
|
||||
|
||||
#ifndef BOOST_NO_STD_WSTRING
|
||||
/** Implements a path using a std::wstring as the key. */
|
||||
typedef string_path<std::wstring, id_translator<std::wstring> > wpath;
|
||||
|
||||
/**
|
||||
* A property tree with std::wstring for key and data, and default
|
||||
* comparison.
|
||||
* @note The type only exists if the platform supports @c wchar_t.
|
||||
*/
|
||||
typedef basic_ptree<std::wstring, std::wstring> wptree;
|
||||
|
||||
/**
|
||||
* A property tree with std::wstring for key and data, and case-insensitive
|
||||
* comparison.
|
||||
* @note The type only exists if the platform supports @c wchar_t.
|
||||
*/
|
||||
typedef basic_ptree<std::wstring, std::wstring,
|
||||
detail::less_nocase<std::wstring> >
|
||||
wiptree;
|
||||
#endif
|
||||
|
||||
// Free functions
|
||||
|
||||
/**
|
||||
* Swap two property tree instances.
|
||||
*/
|
||||
template<class K, class D, class C>
|
||||
void swap(basic_ptree<K, D, C> &pt1,
|
||||
basic_ptree<K, D, C> &pt2);
|
||||
|
||||
} }
|
||||
|
||||
|
||||
#if !defined(BOOST_PROPERTY_TREE_DOXYGEN_INVOKED)
|
||||
// Throwing macro to avoid no return warnings portably
|
||||
# define BOOST_PROPERTY_TREE_THROW(e) BOOST_THROW_EXCEPTION(e)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,135 @@
|
||||
//---------------------------------------------------------------------------//
|
||||
// Copyright (c) 2013-2015 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_IMAGE_IMAGE_FORMAT_HPP
|
||||
#define BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP
|
||||
|
||||
#include <boost/compute/cl.hpp>
|
||||
|
||||
namespace boost {
|
||||
namespace compute {
|
||||
|
||||
/// \class image_format
|
||||
/// \brief A OpenCL image format
|
||||
///
|
||||
/// For example, to create a format for a 8-bit RGBA image:
|
||||
/// \code
|
||||
/// boost::compute::image_format rgba8(CL_RGBA, CL_UNSIGNED_INT8);
|
||||
/// \endcode
|
||||
///
|
||||
/// After being constructed, image_format objects are usually passed to the
|
||||
/// constructor of the various image classes (e.g. \ref image2d, \ref image3d)
|
||||
/// to create an image object on a compute device.
|
||||
///
|
||||
/// Image formats supported by a context can be queried with the static
|
||||
/// get_supported_formats() in each image class. For example:
|
||||
/// \code
|
||||
/// std::vector<image_format> formats = image2d::get_supported_formats(ctx);
|
||||
/// \endcode
|
||||
///
|
||||
/// \see image2d
|
||||
class image_format
|
||||
{
|
||||
public:
|
||||
enum channel_order {
|
||||
r = CL_R,
|
||||
a = CL_A,
|
||||
intensity = CL_INTENSITY,
|
||||
luminance = CL_LUMINANCE,
|
||||
rg = CL_RG,
|
||||
ra = CL_RA,
|
||||
rgb = CL_RGB,
|
||||
rgba = CL_RGBA,
|
||||
argb = CL_ARGB,
|
||||
bgra = CL_BGRA
|
||||
};
|
||||
|
||||
enum channel_data_type {
|
||||
snorm_int8 = CL_SNORM_INT8,
|
||||
snorm_int16 = CL_SNORM_INT16,
|
||||
unorm_int8 = CL_UNORM_INT8,
|
||||
unorm_int16 = CL_UNORM_INT16,
|
||||
unorm_short_565 = CL_UNORM_SHORT_565,
|
||||
unorm_short_555 = CL_UNORM_SHORT_555,
|
||||
unorm_int_101010 = CL_UNORM_INT_101010,
|
||||
signed_int8 = CL_SIGNED_INT8,
|
||||
signed_int16 = CL_SIGNED_INT16,
|
||||
signed_int32 = CL_SIGNED_INT32,
|
||||
unsigned_int8 = CL_UNSIGNED_INT8,
|
||||
unsigned_int16 = CL_UNSIGNED_INT16,
|
||||
unsigned_int32 = CL_UNSIGNED_INT32,
|
||||
float16 = CL_HALF_FLOAT,
|
||||
float32 = CL_FLOAT
|
||||
};
|
||||
|
||||
/// Creates a new image format object with \p order and \p type.
|
||||
explicit image_format(cl_channel_order order, cl_channel_type type)
|
||||
{
|
||||
m_format.image_channel_order = order;
|
||||
m_format.image_channel_data_type = type;
|
||||
}
|
||||
|
||||
/// Creates a new image format object from \p format.
|
||||
explicit image_format(const cl_image_format &format)
|
||||
{
|
||||
m_format.image_channel_order = format.image_channel_order;
|
||||
m_format.image_channel_data_type = format.image_channel_data_type;
|
||||
}
|
||||
|
||||
/// Creates a new image format object as a copy of \p other.
|
||||
image_format(const image_format &other)
|
||||
: m_format(other.m_format)
|
||||
{
|
||||
}
|
||||
|
||||
/// Copies the format from \p other to \c *this.
|
||||
image_format& operator=(const image_format &other)
|
||||
{
|
||||
if(this != &other){
|
||||
m_format = other.m_format;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/// Destroys the image format object.
|
||||
~image_format()
|
||||
{
|
||||
}
|
||||
|
||||
/// Returns a pointer to the \c cl_image_format object.
|
||||
const cl_image_format* get_format_ptr() const
|
||||
{
|
||||
return &m_format;
|
||||
}
|
||||
|
||||
/// Returns \c true if \c *this is the same as \p other.
|
||||
bool operator==(const image_format &other) const
|
||||
{
|
||||
return m_format.image_channel_order ==
|
||||
other.m_format.image_channel_order &&
|
||||
m_format.image_channel_data_type ==
|
||||
other.m_format.image_channel_data_type;
|
||||
}
|
||||
|
||||
/// Returns \c true if \c *this is not the same as \p other.
|
||||
bool operator!=(const image_format &other) const
|
||||
{
|
||||
return !(*this == other);
|
||||
}
|
||||
|
||||
private:
|
||||
cl_image_format m_format;
|
||||
};
|
||||
|
||||
} // end compute namespace
|
||||
} // end boost namespace
|
||||
|
||||
#endif // BOOST_COMPUTE_IMAGE_IMAGE_FORMAT_HPP
|
||||
@@ -0,0 +1,51 @@
|
||||
// Copyright John Maddock 2016.
|
||||
// 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_MATH_TOOLS_CONVERT_FROM_STRING_INCLUDED
|
||||
#define BOOST_MATH_TOOLS_CONVERT_FROM_STRING_INCLUDED
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include <boost/type_traits/is_constructible.hpp>
|
||||
#include <boost/type_traits/conditional.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
namespace boost{ namespace math{ namespace tools{
|
||||
|
||||
template <class T>
|
||||
struct convert_from_string_result
|
||||
{
|
||||
typedef typename boost::conditional<boost::is_constructible<T, const char*>::value, const char*, T>::type type;
|
||||
};
|
||||
|
||||
template <class Real>
|
||||
Real convert_from_string(const char* p, const mpl::false_&)
|
||||
{
|
||||
#ifdef BOOST_MATH_NO_LEXICAL_CAST
|
||||
// This function should not compile, we don't have the necesary functionality to support it:
|
||||
BOOST_STATIC_ASSERT(sizeof(Real) == 0);
|
||||
#else
|
||||
return boost::lexical_cast<Real>(p);
|
||||
#endif
|
||||
}
|
||||
template <class Real>
|
||||
BOOST_CONSTEXPR const char* convert_from_string(const char* p, const mpl::true_&) BOOST_NOEXCEPT
|
||||
{
|
||||
return p;
|
||||
}
|
||||
template <class Real>
|
||||
BOOST_CONSTEXPR typename convert_from_string_result<Real>::type convert_from_string(const char* p) BOOST_NOEXCEPT_IF((boost::is_constructible<Real, const char*>::value))
|
||||
{
|
||||
return convert_from_string<Real>(p, boost::is_constructible<Real, const char*>());
|
||||
}
|
||||
|
||||
} // namespace tools
|
||||
} // namespace math
|
||||
} // namespace boost
|
||||
|
||||
#endif // BOOST_MATH_TOOLS_CONVERT_FROM_STRING_INCLUDED
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
gcc -c gran.c
|
||||
gfortran -c fftw3mod.f90
|
||||
gfortran -c f77_wisdom.f90
|
||||
gfortran -o chkfft3 chkfft3.f90 f77_wisdom.o gran.o /JTSDK-QT/appsupport/runtime/libfftw3f-3.dll
|
||||
@@ -0,0 +1,94 @@
|
||||
#ifndef MODULATOR_HPP__
|
||||
#define MODULATOR_HPP__
|
||||
|
||||
#include <QAudio>
|
||||
#include <QPointer>
|
||||
|
||||
#include "AudioDevice.hpp"
|
||||
|
||||
class SoundOutput;
|
||||
|
||||
//
|
||||
// Input device that generates PCM audio frames that encode a message
|
||||
// and an optional CW ID.
|
||||
//
|
||||
// Output can be muted while underway, preserving waveform timing when
|
||||
// transmission is resumed.
|
||||
//
|
||||
class Modulator
|
||||
: public AudioDevice
|
||||
{
|
||||
Q_OBJECT;
|
||||
|
||||
public:
|
||||
enum ModulatorState {Synchronizing, Active, Idle};
|
||||
|
||||
Modulator (unsigned frameRate, unsigned periodLengthInSeconds, QObject * parent = nullptr);
|
||||
|
||||
void close () override;
|
||||
|
||||
bool isTuning () const {return m_tuning;}
|
||||
double frequency () const {return m_frequency;}
|
||||
bool isActive () const {return m_state != Idle;}
|
||||
void setSpread(double s) {m_fSpread=s;}
|
||||
void setPeriod(unsigned p) {m_period=p;}
|
||||
void set_nsym(int n) {m_symbolsLength=n;}
|
||||
|
||||
Q_SLOT void start (unsigned symbolsLength, double framesPerSymbol, double frequency,
|
||||
double toneSpacing, SoundOutput *, Channel = Mono,
|
||||
bool synchronize = true, bool fastMode = false,
|
||||
double dBSNR = 99., int TRperiod=60);
|
||||
Q_SLOT void stop (bool quick = false);
|
||||
Q_SLOT void tune (bool newState = true);
|
||||
Q_SLOT void setFrequency (double newFrequency) {m_frequency = newFrequency;}
|
||||
Q_SIGNAL void stateChanged (ModulatorState) const;
|
||||
|
||||
protected:
|
||||
qint64 readData (char * data, qint64 maxSize) override;
|
||||
qint64 writeData (char const * /* data */, qint64 /* maxSize */) override
|
||||
{
|
||||
return -1; // we don't consume data
|
||||
}
|
||||
|
||||
private:
|
||||
qint16 postProcessSample (qint16 sample) const;
|
||||
|
||||
QPointer<SoundOutput> m_stream;
|
||||
bool m_quickClose;
|
||||
|
||||
unsigned m_symbolsLength;
|
||||
|
||||
static double constexpr m_twoPi = 2.0 * 3.141592653589793238462;
|
||||
unsigned m_nspd = 2048 + 512; // CW ID WPM factor = 22.5 WPM
|
||||
|
||||
double m_phi;
|
||||
double m_dphi;
|
||||
double m_amp;
|
||||
double m_nsps;
|
||||
double volatile m_frequency;
|
||||
double m_frequency0;
|
||||
double m_snr;
|
||||
double m_fac;
|
||||
double m_toneSpacing;
|
||||
double m_fSpread;
|
||||
|
||||
qint64 m_silentFrames;
|
||||
qint32 m_TRperiod;
|
||||
qint16 m_ramp;
|
||||
|
||||
unsigned m_frameRate;
|
||||
unsigned m_period;
|
||||
ModulatorState volatile m_state;
|
||||
|
||||
bool volatile m_tuning;
|
||||
bool m_addNoise;
|
||||
bool m_bFastMode;
|
||||
|
||||
bool m_cwLevel;
|
||||
unsigned m_ic;
|
||||
unsigned m_isym0;
|
||||
int m_j0;
|
||||
double m_toneFrequency0;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,163 @@
|
||||
// Copyright John Maddock 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)
|
||||
|
||||
#ifdef _MSC_VER
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
#ifndef BOOST_MATH_CONSTANTS_INFO_INCLUDED
|
||||
#define BOOST_MATH_CONSTANTS_INFO_INCLUDED
|
||||
|
||||
#include <boost/math/constants/constants.hpp>
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <typeinfo>
|
||||
|
||||
namespace boost{ namespace math{ namespace constants{
|
||||
|
||||
namespace detail{
|
||||
|
||||
template <class T>
|
||||
const char* nameof(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(T))
|
||||
{
|
||||
return typeid(T).name();
|
||||
}
|
||||
template <>
|
||||
const char* nameof<float>(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(float))
|
||||
{
|
||||
return "float";
|
||||
}
|
||||
template <>
|
||||
const char* nameof<double>(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(double))
|
||||
{
|
||||
return "double";
|
||||
}
|
||||
template <>
|
||||
const char* nameof<long double>(BOOST_MATH_EXPLICIT_TEMPLATE_TYPE_SPEC(long double))
|
||||
{
|
||||
return "long double";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
template <class T, class Policy>
|
||||
void print_info_on_type(std::ostream& os = std::cout BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(T) BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(Policy))
|
||||
{
|
||||
using detail::nameof;
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4127)
|
||||
#endif
|
||||
os <<
|
||||
"Information on the Implementation and Handling of \n"
|
||||
"Mathematical Constants for Type " << nameof<T>() <<
|
||||
"\n\n"
|
||||
"Checking for std::numeric_limits<" << nameof<T>() << "> specialisation: " <<
|
||||
(std::numeric_limits<T>::is_specialized ? "yes" : "no") << std::endl;
|
||||
if(std::numeric_limits<T>::is_specialized)
|
||||
{
|
||||
os <<
|
||||
"std::numeric_limits<" << nameof<T>() << ">::digits reports that the radix is " << std::numeric_limits<T>::radix << ".\n";
|
||||
if (std::numeric_limits<T>::radix == 2)
|
||||
{
|
||||
os <<
|
||||
"std::numeric_limits<" << nameof<T>() << ">::digits reports that the precision is \n" << std::numeric_limits<T>::digits << " binary digits.\n";
|
||||
}
|
||||
else if (std::numeric_limits<T>::radix == 10)
|
||||
{
|
||||
os <<
|
||||
"std::numeric_limits<" << nameof<T>() << ">::digits reports that the precision is \n" << std::numeric_limits<T>::digits10 << " decimal digits.\n";
|
||||
os <<
|
||||
"std::numeric_limits<" << nameof<T>() << ">::digits reports that the precision is \n"
|
||||
<< std::numeric_limits<T>::digits * 1000L /301L << " binary digits.\n"; // divide by log2(10) - about 3 bits per decimal digit.
|
||||
}
|
||||
else
|
||||
{
|
||||
os << "Unknown radix = " << std::numeric_limits<T>::radix << "\n";
|
||||
}
|
||||
}
|
||||
typedef typename boost::math::policies::precision<T, Policy>::type precision_type;
|
||||
if(precision_type::value)
|
||||
{
|
||||
if (std::numeric_limits<T>::radix == 2)
|
||||
{
|
||||
os <<
|
||||
"boost::math::policies::precision<" << nameof<T>() << ", " << nameof<Policy>() << " reports that the compile time precision is \n" << precision_type::value << " binary digits.\n";
|
||||
}
|
||||
else if (std::numeric_limits<T>::radix == 10)
|
||||
{
|
||||
os <<
|
||||
"boost::math::policies::precision<" << nameof<T>() << ", " << nameof<Policy>() << " reports that the compile time precision is \n" << precision_type::value << " binary digits.\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
os << "Unknown radix = " << std::numeric_limits<T>::radix << "\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
os <<
|
||||
"boost::math::policies::precision<" << nameof<T>() << ", Policy> \n"
|
||||
"reports that there is no compile type precision available.\n"
|
||||
"boost::math::tools::digits<" << nameof<T>() << ">() \n"
|
||||
"reports that the current runtime precision is \n" <<
|
||||
boost::math::tools::digits<T>() << " binary digits.\n";
|
||||
}
|
||||
|
||||
typedef typename construction_traits<T, Policy>::type construction_type;
|
||||
|
||||
switch(construction_type::value)
|
||||
{
|
||||
case 0:
|
||||
os <<
|
||||
"No compile time precision is available, the construction method \n"
|
||||
"will be decided at runtime and results will not be cached \n"
|
||||
"- this may lead to poor runtime performance.\n"
|
||||
"Current runtime precision indicates that\n";
|
||||
if(boost::math::tools::digits<T>() > max_string_digits)
|
||||
{
|
||||
os << "the constant will be recalculated on each call.\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
os << "the constant will be constructed from a string on each call.\n";
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
os <<
|
||||
"The constant will be constructed from a float.\n";
|
||||
break;
|
||||
case 2:
|
||||
os <<
|
||||
"The constant will be constructed from a double.\n";
|
||||
break;
|
||||
case 3:
|
||||
os <<
|
||||
"The constant will be constructed from a long double.\n";
|
||||
break;
|
||||
case 4:
|
||||
os <<
|
||||
"The constant will be constructed from a string (and the result cached).\n";
|
||||
break;
|
||||
default:
|
||||
os <<
|
||||
"The constant will be calculated (and the result cached).\n";
|
||||
break;
|
||||
}
|
||||
os << std::endl;
|
||||
#ifdef BOOST_MSVC
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
}
|
||||
|
||||
template <class T>
|
||||
void print_info_on_type(std::ostream& os = std::cout BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE_SPEC(T))
|
||||
{
|
||||
print_info_on_type<T, boost::math::policies::policy<> >(os);
|
||||
}
|
||||
|
||||
}}} // namespaces
|
||||
|
||||
#endif // BOOST_MATH_CONSTANTS_INFO_INCLUDED
|
||||
@@ -0,0 +1,169 @@
|
||||
#ifndef DATE_TIME_COMPILER_CONFIG_HPP___
|
||||
#define DATE_TIME_COMPILER_CONFIG_HPP___
|
||||
|
||||
/* Copyright (c) 2002-2004 CrystalClear Software, Inc.
|
||||
* Subject to the Boost Software License, Version 1.0. (See accompanying
|
||||
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
||||
* Author: Jeff Garland, Bart Garst
|
||||
* $Date$
|
||||
*/
|
||||
|
||||
#include <cstdlib>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/detail/workaround.hpp>
|
||||
|
||||
// With boost release 1.33, date_time will be using a different,
|
||||
// more flexible, IO system. This new system is not compatible with
|
||||
// old compilers. The original date_time IO system remains for those
|
||||
// compilers. They must define this macro to use the legacy IO.
|
||||
// (defined(__BORLANDC__) && (__BORLANDC__ <= 0x0581) ) ) &&
|
||||
#if( BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) ) \
|
||||
|| BOOST_WORKAROUND( __GNUC__, < 3) \
|
||||
|| (BOOST_WORKAROUND( _MSC_VER, <= 1300) ) \
|
||||
) \
|
||||
&& !defined(USE_DATE_TIME_PRE_1_33_FACET_IO)
|
||||
# define USE_DATE_TIME_PRE_1_33_FACET_IO
|
||||
#endif
|
||||
|
||||
|
||||
// This file performs some local compiler configurations
|
||||
|
||||
#include <boost/date_time/locale_config.hpp> //set up locale configurations
|
||||
|
||||
//Set up a configuration parameter for platforms that have
|
||||
//GetTimeOfDay
|
||||
#if defined(BOOST_HAS_GETTIMEOFDAY) || defined(BOOST_HAS_FTIME)
|
||||
#define BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK
|
||||
#endif
|
||||
|
||||
// To Force no default constructors for date & ptime, un-comment following
|
||||
//#define DATE_TIME_NO_DEFAULT_CONSTRUCTOR
|
||||
|
||||
// Include extensions to date_duration - comment out to remove this feature
|
||||
#define BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES
|
||||
// these extensions are known to cause problems with gcc295
|
||||
#if defined(__GNUC__) && (__GNUC__ < 3)
|
||||
#undef BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES
|
||||
#endif
|
||||
|
||||
#if (defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) || BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) ) )
|
||||
#define BOOST_DATE_TIME_NO_MEMBER_INIT
|
||||
#endif
|
||||
|
||||
// include these types before we try to re-define them
|
||||
#include <boost/cstdint.hpp>
|
||||
|
||||
//Define INT64_C for compilers that don't have it
|
||||
#if (!defined(INT64_C))
|
||||
#define INT64_C(value) int64_t(value)
|
||||
#endif
|
||||
|
||||
|
||||
/* Workaround for Borland iterator error. Error was "Cannot convert 'istream *' to 'wistream *' in function istream_iterator<>::istream_iterator() */
|
||||
#if defined(__BORLANDC__) && defined(BOOST_BCB_WITH_RW_LIB)
|
||||
#define BOOST_DATE_TIME_NO_WISTREAM_ITERATOR
|
||||
#endif
|
||||
|
||||
|
||||
// Borland v5.64 does not have the following in std namespace; v5.5.1 does
|
||||
#if defined(__BORLANDC__) && defined(BOOST_BCB_WITH_STLPORT)
|
||||
#include <locale>
|
||||
namespace std {
|
||||
using stlport::tolower;
|
||||
using stlport::ctype;
|
||||
using stlport::use_facet;
|
||||
}
|
||||
#endif
|
||||
|
||||
// workaround for errors associated with output for date classes
|
||||
// modifications and input streaming for time classes.
|
||||
// Compilers affected are:
|
||||
// gcc295, msvc (neither with STLPort), any borland
|
||||
//
|
||||
#if (((defined(__GNUC__) && (__GNUC__ < 3)) || \
|
||||
(defined(_MSC_VER) && (_MSC_VER < 1300)) ) && \
|
||||
!defined(_STLP_OWN_IOSTREAMS) ) || \
|
||||
BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x581) )
|
||||
#define BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS
|
||||
#endif
|
||||
|
||||
// The macro marks up places where compiler complains for missing return statement or
|
||||
// uninitialized variables after calling to boost::throw_exception.
|
||||
// BOOST_UNREACHABLE_RETURN doesn't work since even compilers that support
|
||||
// unreachable statements detection emit such warnings.
|
||||
#if defined(_MSC_VER)
|
||||
// Use special MSVC extension to markup unreachable code
|
||||
# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) __assume(false)
|
||||
#elif !defined(BOOST_NO_UNREACHABLE_RETURN_DETECTION)
|
||||
// Call to a non-returning function should suppress the warning
|
||||
# if defined(BOOST_NO_STDC_NAMESPACE)
|
||||
namespace std {
|
||||
using ::abort;
|
||||
}
|
||||
# endif // defined(BOOST_NO_STDC_NAMESPACE)
|
||||
# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) std::abort()
|
||||
#else
|
||||
// For other poor compilers the specified expression is compiled. Usually, this would be a return statement.
|
||||
# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) x
|
||||
#endif
|
||||
|
||||
/* The following handles the definition of the necessary macros
|
||||
* for dll building on Win32 platforms.
|
||||
*
|
||||
* For code that will be placed in the date_time .dll,
|
||||
* it must be properly prefixed with BOOST_DATE_TIME_DECL.
|
||||
* The corresponding .cpp file must have BOOST_DATE_TIME_SOURCE
|
||||
* defined before including its header. For examples see:
|
||||
* greg_month.hpp & greg_month.cpp
|
||||
*
|
||||
*/
|
||||
|
||||
// we need to import/export our code only if the user has specifically
|
||||
// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost
|
||||
// libraries to be dynamically linked, or BOOST_DATE_TIME_DYN_LINK
|
||||
// if they want just this one to be dynamically liked:
|
||||
#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK)
|
||||
// export if this is our own source, otherwise import:
|
||||
# ifdef BOOST_DATE_TIME_SOURCE
|
||||
# define BOOST_DATE_TIME_DECL BOOST_SYMBOL_EXPORT
|
||||
# else
|
||||
# define BOOST_DATE_TIME_DECL BOOST_SYMBOL_IMPORT
|
||||
# endif // BOOST_DATE_TIME_SOURCE
|
||||
#endif // DYN_LINK
|
||||
//
|
||||
// if BOOST_WHATEVER_DECL isn't defined yet define it now:
|
||||
#ifndef BOOST_DATE_TIME_DECL
|
||||
# define BOOST_DATE_TIME_DECL
|
||||
#endif
|
||||
|
||||
//
|
||||
// Automatically link to the correct build variant where possible.
|
||||
//
|
||||
#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_DATE_TIME_NO_LIB) && !defined(BOOST_DATE_TIME_SOURCE)
|
||||
//
|
||||
// Set the name of our library, this will get undef'ed by auto_link.hpp
|
||||
// once it's done with it:
|
||||
//
|
||||
#define BOOST_LIB_NAME boost_date_time
|
||||
//
|
||||
// If we're importing code from a dll, then tell auto_link.hpp about it:
|
||||
//
|
||||
#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK)
|
||||
# define BOOST_DYN_LINK
|
||||
#endif
|
||||
//
|
||||
// And include the header that does the work:
|
||||
//
|
||||
#include <boost/config/auto_link.hpp>
|
||||
#endif // auto-linking disabled
|
||||
|
||||
#if defined(BOOST_HAS_THREADS)
|
||||
# if defined(_MSC_VER) || defined(__MWERKS__) || defined(__MINGW32__) || defined(__BORLANDC__)
|
||||
//no reentrant posix functions (eg: localtime_r)
|
||||
# elif (!defined(__hpux) || (defined(__hpux) && defined(_REENTRANT)))
|
||||
# define BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,205 @@
|
||||
// Copyright Jim Bosch 2010-2012.
|
||||
// Copyright Stefan Seefeld 2016.
|
||||
// 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_python_numpy_ufunc_hpp_
|
||||
#define boost_python_numpy_ufunc_hpp_
|
||||
|
||||
/**
|
||||
* @brief Utilities to create ufunc-like broadcasting functions out of C++ functors.
|
||||
*/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/python/numpy/numpy_object_mgr_traits.hpp>
|
||||
#include <boost/python/numpy/dtype.hpp>
|
||||
#include <boost/python/numpy/ndarray.hpp>
|
||||
|
||||
namespace boost { namespace python { namespace numpy {
|
||||
|
||||
/**
|
||||
* @brief A boost.python "object manager" (subclass of object) for PyArray_MultiIter.
|
||||
*
|
||||
* multi_iter is a Python object, but a very low-level one. It should generally only be used
|
||||
* in loops of the form:
|
||||
* @code
|
||||
* while (iter.not_done()) {
|
||||
* ...
|
||||
* iter.next();
|
||||
* }
|
||||
* @endcode
|
||||
*
|
||||
* @todo I can't tell if this type is exposed in Python anywhere; if it is, we should use that name.
|
||||
* It's more dangerous than most object managers, however - maybe it actually belongs in
|
||||
* a detail namespace?
|
||||
*/
|
||||
class multi_iter : public object
|
||||
{
|
||||
public:
|
||||
|
||||
BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(multi_iter, object);
|
||||
|
||||
/// @brief Increment the iterator.
|
||||
void next();
|
||||
|
||||
/// @brief Check if the iterator is at its end.
|
||||
bool not_done() const;
|
||||
|
||||
/// @brief Return a pointer to the element of the nth broadcasted array.
|
||||
char * get_data(int n) const;
|
||||
|
||||
/// @brief Return the number of dimensions of the broadcasted array expression.
|
||||
int get_nd() const;
|
||||
|
||||
/// @brief Return the shape of the broadcasted array expression as an array of integers.
|
||||
Py_intptr_t const * get_shape() const;
|
||||
|
||||
/// @brief Return the shape of the broadcasted array expression in the nth dimension.
|
||||
Py_intptr_t shape(int n) const;
|
||||
|
||||
};
|
||||
|
||||
/// @brief Construct a multi_iter over a single sequence or scalar object.
|
||||
multi_iter make_multi_iter(object const & a1);
|
||||
|
||||
/// @brief Construct a multi_iter by broadcasting two objects.
|
||||
multi_iter make_multi_iter(object const & a1, object const & a2);
|
||||
|
||||
/// @brief Construct a multi_iter by broadcasting three objects.
|
||||
multi_iter make_multi_iter(object const & a1, object const & a2, object const & a3);
|
||||
|
||||
/**
|
||||
* @brief Helps wrap a C++ functor taking a single scalar argument as a broadcasting ufunc-like
|
||||
* Python object.
|
||||
*
|
||||
* Typical usage looks like this:
|
||||
* @code
|
||||
* struct TimesPI
|
||||
* {
|
||||
* typedef double argument_type;
|
||||
* typedef double result_type;
|
||||
* double operator()(double input) const { return input * M_PI; }
|
||||
* };
|
||||
*
|
||||
* BOOST_PYTHON_MODULE(example)
|
||||
* {
|
||||
* class_< TimesPI >("TimesPI")
|
||||
* .def("__call__", unary_ufunc<TimesPI>::make());
|
||||
* }
|
||||
* @endcode
|
||||
*
|
||||
*/
|
||||
template <typename TUnaryFunctor,
|
||||
typename TArgument=typename TUnaryFunctor::argument_type,
|
||||
typename TResult=typename TUnaryFunctor::result_type>
|
||||
struct unary_ufunc
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief A C++ function with object arguments that broadcasts its arguments before
|
||||
* passing them to the underlying C++ functor.
|
||||
*/
|
||||
static object call(TUnaryFunctor & self, object const & input, object const & output)
|
||||
{
|
||||
dtype in_dtype = dtype::get_builtin<TArgument>();
|
||||
dtype out_dtype = dtype::get_builtin<TResult>();
|
||||
ndarray in_array = from_object(input, in_dtype, ndarray::ALIGNED);
|
||||
ndarray out_array = (output != object()) ?
|
||||
from_object(output, out_dtype, ndarray::ALIGNED | ndarray::WRITEABLE)
|
||||
: zeros(in_array.get_nd(), in_array.get_shape(), out_dtype);
|
||||
multi_iter iter = make_multi_iter(in_array, out_array);
|
||||
while (iter.not_done())
|
||||
{
|
||||
TArgument * argument = reinterpret_cast<TArgument*>(iter.get_data(0));
|
||||
TResult * result = reinterpret_cast<TResult*>(iter.get_data(1));
|
||||
*result = self(*argument);
|
||||
iter.next();
|
||||
}
|
||||
return out_array.scalarize();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a boost.python function object from call() with reasonable keyword names.
|
||||
*
|
||||
* Users will often want to specify their own keyword names with the same signature, but this
|
||||
* is a convenient shortcut.
|
||||
*/
|
||||
static object make()
|
||||
{
|
||||
return make_function(call, default_call_policies(), (arg("input"), arg("output")=object()));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Helps wrap a C++ functor taking a pair of scalar arguments as a broadcasting ufunc-like
|
||||
* Python object.
|
||||
*
|
||||
* Typical usage looks like this:
|
||||
* @code
|
||||
* struct CosSum
|
||||
* {
|
||||
* typedef double first_argument_type;
|
||||
* typedef double second_argument_type;
|
||||
* typedef double result_type;
|
||||
* double operator()(double input1, double input2) const { return std::cos(input1 + input2); }
|
||||
* };
|
||||
*
|
||||
* BOOST_PYTHON_MODULE(example)
|
||||
* {
|
||||
* class_< CosSum >("CosSum")
|
||||
* .def("__call__", binary_ufunc<CosSum>::make());
|
||||
* }
|
||||
* @endcode
|
||||
*
|
||||
*/
|
||||
template <typename TBinaryFunctor,
|
||||
typename TArgument1=typename TBinaryFunctor::first_argument_type,
|
||||
typename TArgument2=typename TBinaryFunctor::second_argument_type,
|
||||
typename TResult=typename TBinaryFunctor::result_type>
|
||||
struct binary_ufunc
|
||||
{
|
||||
|
||||
static object
|
||||
call(TBinaryFunctor & self, object const & input1, object const & input2,
|
||||
object const & output)
|
||||
{
|
||||
dtype in1_dtype = dtype::get_builtin<TArgument1>();
|
||||
dtype in2_dtype = dtype::get_builtin<TArgument2>();
|
||||
dtype out_dtype = dtype::get_builtin<TResult>();
|
||||
ndarray in1_array = from_object(input1, in1_dtype, ndarray::ALIGNED);
|
||||
ndarray in2_array = from_object(input2, in2_dtype, ndarray::ALIGNED);
|
||||
multi_iter iter = make_multi_iter(in1_array, in2_array);
|
||||
ndarray out_array = (output != object())
|
||||
? from_object(output, out_dtype, ndarray::ALIGNED | ndarray::WRITEABLE)
|
||||
: zeros(iter.get_nd(), iter.get_shape(), out_dtype);
|
||||
iter = make_multi_iter(in1_array, in2_array, out_array);
|
||||
while (iter.not_done())
|
||||
{
|
||||
TArgument1 * argument1 = reinterpret_cast<TArgument1*>(iter.get_data(0));
|
||||
TArgument2 * argument2 = reinterpret_cast<TArgument2*>(iter.get_data(1));
|
||||
TResult * result = reinterpret_cast<TResult*>(iter.get_data(2));
|
||||
*result = self(*argument1, *argument2);
|
||||
iter.next();
|
||||
}
|
||||
return out_array.scalarize();
|
||||
}
|
||||
|
||||
static object make()
|
||||
{
|
||||
return make_function(call, default_call_policies(),
|
||||
(arg("input1"), arg("input2"), arg("output")=object()));
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
} // namespace boost::python::numpy
|
||||
|
||||
namespace converter
|
||||
{
|
||||
|
||||
NUMPY_OBJECT_MANAGER_TRAITS(numpy::multi_iter);
|
||||
|
||||
}}} // namespace boost::python::converter
|
||||
|
||||
#endif
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,44 @@
|
||||
/*=============================================================================
|
||||
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_REPLACE_IF_08182005_0939)
|
||||
#define FUSION_REPLACE_IF_08182005_0939
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/view/transform_view/transform_view.hpp>
|
||||
#include <boost/fusion/algorithm/transformation/detail/replace_if.hpp>
|
||||
#include <boost/fusion/support/is_sequence.hpp>
|
||||
#include <boost/utility/enable_if.hpp>
|
||||
#include <boost/type_traits/is_same.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace result_of
|
||||
{
|
||||
template <typename Sequence, typename F, typename T>
|
||||
struct replace_if
|
||||
{
|
||||
typedef transform_view<Sequence, detail::replacer_if<F, T> > type;
|
||||
};
|
||||
}
|
||||
|
||||
template <typename Sequence, typename F, typename T>
|
||||
BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename
|
||||
enable_if<
|
||||
traits::is_sequence<Sequence>
|
||||
, typename result_of::replace_if<Sequence const, F, T>::type
|
||||
>::type
|
||||
replace_if(Sequence const& seq, F pred, T const& new_value)
|
||||
{
|
||||
typedef typename result_of::replace_if<Sequence const, F, T>::type result;
|
||||
detail::replacer_if<F, T> f(pred, new_value);
|
||||
return result(seq, f);
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,228 @@
|
||||
|
||||
// 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)
|
||||
//
|
||||
|
||||
// Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header
|
||||
// -- DO NOT modify by hand!
|
||||
|
||||
namespace boost { namespace mpl {
|
||||
|
||||
namespace aux {
|
||||
|
||||
template<
|
||||
bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
|
||||
, bool C5 = false
|
||||
>
|
||||
struct lambda_or
|
||||
: true_
|
||||
{
|
||||
};
|
||||
|
||||
template<>
|
||||
struct lambda_or< false,false,false,false,false >
|
||||
: false_
|
||||
{
|
||||
};
|
||||
|
||||
template< typename Arity > struct lambda_impl
|
||||
{
|
||||
template< typename T, typename Tag, typename Protect > struct result_
|
||||
{
|
||||
typedef T type;
|
||||
typedef is_placeholder<T> is_le;
|
||||
};
|
||||
};
|
||||
|
||||
template<> struct lambda_impl< int_<1> >
|
||||
{
|
||||
template< typename F, typename Tag, typename Protect > struct result_
|
||||
{
|
||||
typedef lambda< typename F::arg1, Tag, false_ > l1;
|
||||
typedef typename l1::is_le is_le1;
|
||||
typedef aux::lambda_or<
|
||||
BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value
|
||||
> is_le;
|
||||
|
||||
typedef bind1<
|
||||
typename F::rebind
|
||||
, typename l1::type
|
||||
> bind_;
|
||||
|
||||
typedef typename if_<
|
||||
is_le
|
||||
, if_< Protect, mpl::protect<bind_>, bind_ >
|
||||
, identity<F>
|
||||
>::type type_;
|
||||
|
||||
typedef typename type_::type type;
|
||||
};
|
||||
};
|
||||
|
||||
template<> struct lambda_impl< int_<2> >
|
||||
{
|
||||
template< typename F, typename Tag, typename Protect > struct result_
|
||||
{
|
||||
typedef lambda< typename F::arg1, Tag, false_ > l1;
|
||||
typedef lambda< typename F::arg2, Tag, false_ > l2;
|
||||
|
||||
typedef typename l1::is_le is_le1;
|
||||
typedef typename l2::is_le is_le2;
|
||||
|
||||
|
||||
typedef aux::lambda_or<
|
||||
BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value
|
||||
> is_le;
|
||||
|
||||
typedef bind2<
|
||||
typename F::rebind
|
||||
, typename l1::type, typename l2::type
|
||||
> bind_;
|
||||
|
||||
typedef typename if_<
|
||||
is_le
|
||||
, if_< Protect, mpl::protect<bind_>, bind_ >
|
||||
, identity<F>
|
||||
>::type type_;
|
||||
|
||||
typedef typename type_::type type;
|
||||
};
|
||||
};
|
||||
|
||||
template<> struct lambda_impl< int_<3> >
|
||||
{
|
||||
template< typename F, typename Tag, typename Protect > struct result_
|
||||
{
|
||||
typedef lambda< typename F::arg1, Tag, false_ > l1;
|
||||
typedef lambda< typename F::arg2, Tag, false_ > l2;
|
||||
typedef lambda< typename F::arg3, Tag, false_ > l3;
|
||||
|
||||
typedef typename l1::is_le is_le1;
|
||||
typedef typename l2::is_le is_le2;
|
||||
typedef typename l3::is_le is_le3;
|
||||
|
||||
|
||||
typedef aux::lambda_or<
|
||||
BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value
|
||||
> is_le;
|
||||
|
||||
typedef bind3<
|
||||
typename F::rebind
|
||||
, typename l1::type, typename l2::type, typename l3::type
|
||||
> bind_;
|
||||
|
||||
typedef typename if_<
|
||||
is_le
|
||||
, if_< Protect, mpl::protect<bind_>, bind_ >
|
||||
, identity<F>
|
||||
>::type type_;
|
||||
|
||||
typedef typename type_::type type;
|
||||
};
|
||||
};
|
||||
|
||||
template<> struct lambda_impl< int_<4> >
|
||||
{
|
||||
template< typename F, typename Tag, typename Protect > struct result_
|
||||
{
|
||||
typedef lambda< typename F::arg1, Tag, false_ > l1;
|
||||
typedef lambda< typename F::arg2, Tag, false_ > l2;
|
||||
typedef lambda< typename F::arg3, Tag, false_ > l3;
|
||||
typedef lambda< typename F::arg4, Tag, false_ > l4;
|
||||
|
||||
typedef typename l1::is_le is_le1;
|
||||
typedef typename l2::is_le is_le2;
|
||||
typedef typename l3::is_le is_le3;
|
||||
typedef typename l4::is_le is_le4;
|
||||
|
||||
|
||||
typedef aux::lambda_or<
|
||||
BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value
|
||||
> is_le;
|
||||
|
||||
typedef bind4<
|
||||
typename F::rebind
|
||||
, typename l1::type, typename l2::type, typename l3::type
|
||||
, typename l4::type
|
||||
> bind_;
|
||||
|
||||
typedef typename if_<
|
||||
is_le
|
||||
, if_< Protect, mpl::protect<bind_>, bind_ >
|
||||
, identity<F>
|
||||
>::type type_;
|
||||
|
||||
typedef typename type_::type type;
|
||||
};
|
||||
};
|
||||
|
||||
template<> struct lambda_impl< int_<5> >
|
||||
{
|
||||
template< typename F, typename Tag, typename Protect > struct result_
|
||||
{
|
||||
typedef lambda< typename F::arg1, Tag, false_ > l1;
|
||||
typedef lambda< typename F::arg2, Tag, false_ > l2;
|
||||
typedef lambda< typename F::arg3, Tag, false_ > l3;
|
||||
typedef lambda< typename F::arg4, Tag, false_ > l4;
|
||||
typedef lambda< typename F::arg5, Tag, false_ > l5;
|
||||
|
||||
typedef typename l1::is_le is_le1;
|
||||
typedef typename l2::is_le is_le2;
|
||||
typedef typename l3::is_le is_le3;
|
||||
typedef typename l4::is_le is_le4;
|
||||
typedef typename l5::is_le is_le5;
|
||||
|
||||
|
||||
typedef aux::lambda_or<
|
||||
BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value
|
||||
> is_le;
|
||||
|
||||
typedef bind5<
|
||||
typename F::rebind
|
||||
, typename l1::type, typename l2::type, typename l3::type
|
||||
, typename l4::type, typename l5::type
|
||||
> bind_;
|
||||
|
||||
typedef typename if_<
|
||||
is_le
|
||||
, if_< Protect, mpl::protect<bind_>, bind_ >
|
||||
, identity<F>
|
||||
>::type type_;
|
||||
|
||||
typedef typename type_::type type;
|
||||
};
|
||||
};
|
||||
|
||||
} // namespace aux
|
||||
|
||||
template<
|
||||
typename T
|
||||
, typename Tag
|
||||
, typename Protect
|
||||
>
|
||||
struct lambda
|
||||
{
|
||||
/// Metafunction forwarding confuses MSVC 6.x
|
||||
typedef typename aux::template_arity<T>::type arity_;
|
||||
typedef typename aux::lambda_impl<arity_>
|
||||
::template result_< T,Tag,Protect > l_;
|
||||
|
||||
typedef typename l_::type type;
|
||||
typedef typename l_::is_le is_le;
|
||||
};
|
||||
|
||||
BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda)
|
||||
|
||||
template<
|
||||
typename T
|
||||
>
|
||||
struct is_lambda_expression
|
||||
: lambda<T>::is_le
|
||||
{
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gaztanaga 2011-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_DETAIL_WINAPI_MUTEX_WRAPPER_HPP
|
||||
#define BOOST_INTERPROCESS_DETAIL_WINAPI_MUTEX_WRAPPER_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/permissions.hpp>
|
||||
#include <boost/interprocess/detail/win32_api.hpp>
|
||||
#include <boost/interprocess/detail/posix_time_types_wrk.hpp>
|
||||
#include <boost/interprocess/sync/windows/winapi_wrapper_common.hpp>
|
||||
#include <boost/interprocess/errors.hpp>
|
||||
#include <boost/interprocess/exceptions.hpp>
|
||||
#include <limits>
|
||||
|
||||
namespace boost {
|
||||
namespace interprocess {
|
||||
namespace ipcdetail {
|
||||
|
||||
class winapi_mutex_functions
|
||||
{
|
||||
#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
|
||||
|
||||
//Non-copyable
|
||||
winapi_mutex_functions(const winapi_mutex_functions &);
|
||||
winapi_mutex_functions &operator=(const winapi_mutex_functions &);
|
||||
#endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
|
||||
|
||||
public:
|
||||
winapi_mutex_functions(void *mtx_hnd)
|
||||
: m_mtx_hnd(mtx_hnd)
|
||||
{}
|
||||
|
||||
void unlock()
|
||||
{ winapi::release_mutex(m_mtx_hnd); }
|
||||
|
||||
void lock()
|
||||
{ return winapi_wrapper_wait_for_single_object(m_mtx_hnd); }
|
||||
|
||||
bool try_lock()
|
||||
{ return winapi_wrapper_try_wait_for_single_object(m_mtx_hnd); }
|
||||
|
||||
bool timed_lock(const boost::posix_time::ptime &abs_time)
|
||||
{ return winapi_wrapper_timed_wait_for_single_object(m_mtx_hnd, abs_time); }
|
||||
|
||||
#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
|
||||
protected:
|
||||
void *m_mtx_hnd;
|
||||
#endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
|
||||
};
|
||||
|
||||
//Swappable mutex wrapper
|
||||
class winapi_mutex_wrapper
|
||||
: public winapi_mutex_functions
|
||||
{
|
||||
#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
|
||||
|
||||
//Non-copyable
|
||||
winapi_mutex_wrapper(const winapi_mutex_wrapper &);
|
||||
winapi_mutex_wrapper &operator=(const winapi_mutex_wrapper &);
|
||||
#endif //#ifndef BOOST_INTERPROCESS_DOXYGEN_INVOKED
|
||||
|
||||
//Note that Windows API does not return winapi::invalid_handle_value
|
||||
//when failing to create/open a mutex, but a nullptr
|
||||
|
||||
public:
|
||||
winapi_mutex_wrapper(void *mtx_hnd = 0)
|
||||
: winapi_mutex_functions(mtx_hnd)
|
||||
{}
|
||||
|
||||
~winapi_mutex_wrapper()
|
||||
{ this->close(); }
|
||||
|
||||
void *release()
|
||||
{
|
||||
void *hnd = m_mtx_hnd;
|
||||
m_mtx_hnd = 0;
|
||||
return hnd;
|
||||
}
|
||||
|
||||
void *handle() const
|
||||
{ return m_mtx_hnd; }
|
||||
|
||||
bool open_or_create(const char *name, const permissions &perm)
|
||||
{
|
||||
if(m_mtx_hnd == 0){
|
||||
m_mtx_hnd = winapi::open_or_create_mutex
|
||||
( name
|
||||
, false
|
||||
, (winapi::interprocess_security_attributes*)perm.get_permissions()
|
||||
);
|
||||
return m_mtx_hnd != 0;
|
||||
}
|
||||
else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void close()
|
||||
{
|
||||
if(m_mtx_hnd != 0){
|
||||
winapi::close_handle(m_mtx_hnd);
|
||||
m_mtx_hnd = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void swap(winapi_mutex_wrapper &other)
|
||||
{ void *tmp = m_mtx_hnd; m_mtx_hnd = other.m_mtx_hnd; other.m_mtx_hnd = tmp; }
|
||||
};
|
||||
|
||||
} //namespace ipcdetail {
|
||||
} //namespace interprocess {
|
||||
} //namespace boost {
|
||||
|
||||
#include <boost/interprocess/detail/config_end.hpp>
|
||||
|
||||
#endif //BOOST_INTERPROCESS_DETAIL_WINAPI_MUTEX_WRAPPER_HPP
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,68 @@
|
||||
#ifndef _GREGORIAN__CONVERSION_HPP___
|
||||
#define _GREGORIAN__CONVERSION_HPP___
|
||||
|
||||
/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
|
||||
* Use, modification and distribution is subject to the
|
||||
* Boost Software License, Version 1.0. (See accompanying
|
||||
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
||||
* Author: Jeff Garland, Bart Garst
|
||||
* $Date$
|
||||
*/
|
||||
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
#include <boost/throw_exception.hpp>
|
||||
#include <boost/date_time/c_time.hpp>
|
||||
#include <boost/date_time/special_defs.hpp>
|
||||
#include <boost/date_time/gregorian/gregorian_types.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
namespace gregorian {
|
||||
|
||||
//! Converts a date to a tm struct. Throws out_of_range exception if date is a special value
|
||||
inline
|
||||
std::tm to_tm(const date& d)
|
||||
{
|
||||
if (d.is_special())
|
||||
{
|
||||
std::string s = "tm unable to handle ";
|
||||
switch (d.as_special())
|
||||
{
|
||||
case date_time::not_a_date_time:
|
||||
s += "not-a-date-time value"; break;
|
||||
case date_time::neg_infin:
|
||||
s += "-infinity date value"; break;
|
||||
case date_time::pos_infin:
|
||||
s += "+infinity date value"; break;
|
||||
default:
|
||||
s += "a special date value"; break;
|
||||
}
|
||||
boost::throw_exception(std::out_of_range(s));
|
||||
}
|
||||
|
||||
std::tm datetm;
|
||||
std::memset(&datetm, 0, sizeof(datetm));
|
||||
boost::gregorian::date::ymd_type ymd = d.year_month_day();
|
||||
datetm.tm_year = ymd.year - 1900;
|
||||
datetm.tm_mon = ymd.month - 1;
|
||||
datetm.tm_mday = ymd.day;
|
||||
datetm.tm_wday = d.day_of_week();
|
||||
datetm.tm_yday = d.day_of_year() - 1;
|
||||
datetm.tm_isdst = -1; // negative because not enough info to set tm_isdst
|
||||
return datetm;
|
||||
}
|
||||
|
||||
//! Converts a tm structure into a date dropping the any time values.
|
||||
inline
|
||||
date date_from_tm(const std::tm& datetm)
|
||||
{
|
||||
return date(static_cast<unsigned short>(datetm.tm_year+1900),
|
||||
static_cast<unsigned short>(datetm.tm_mon+1),
|
||||
static_cast<unsigned short>(datetm.tm_mday));
|
||||
}
|
||||
|
||||
} } //namespace boost::gregorian
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,579 @@
|
||||
//
|
||||
// Copyright (c) 2000-2002
|
||||
// Joerg Walter, Mathias Koch
|
||||
//
|
||||
// Distributed under the Boost Software License, Version 1.0. (See
|
||||
// accompanying file LICENSE_1_0.txt or copy at
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//
|
||||
// The authors gratefully acknowledge the support of
|
||||
// GeNeSys mbH & Co. KG in producing this work.
|
||||
//
|
||||
|
||||
#ifndef _BOOST_UBLAS_STORAGE_SPARSE_
|
||||
#define _BOOST_UBLAS_STORAGE_SPARSE_
|
||||
|
||||
#include <map>
|
||||
#include <boost/serialization/collection_size_type.hpp>
|
||||
#include <boost/serialization/nvp.hpp>
|
||||
#include <boost/serialization/array.hpp>
|
||||
#include <boost/serialization/map.hpp>
|
||||
#include <boost/serialization/base_object.hpp>
|
||||
|
||||
#include <boost/numeric/ublas/storage.hpp>
|
||||
|
||||
|
||||
namespace boost { namespace numeric { namespace ublas {
|
||||
|
||||
namespace detail {
|
||||
|
||||
template<class I, class T, class C>
|
||||
BOOST_UBLAS_INLINE
|
||||
I lower_bound (const I &begin, const I &end, const T &t, C compare) {
|
||||
// t <= *begin <=> ! (*begin < t)
|
||||
if (begin == end || ! compare (*begin, t))
|
||||
return begin;
|
||||
if (compare (*(end - 1), t))
|
||||
return end;
|
||||
return std::lower_bound (begin, end, t, compare);
|
||||
}
|
||||
template<class I, class T, class C>
|
||||
BOOST_UBLAS_INLINE
|
||||
I upper_bound (const I &begin, const I &end, const T &t, C compare) {
|
||||
if (begin == end || compare (t, *begin))
|
||||
return begin;
|
||||
// (*end - 1) <= t <=> ! (t < *end)
|
||||
if (! compare (t, *(end - 1)))
|
||||
return end;
|
||||
return std::upper_bound (begin, end, t, compare);
|
||||
}
|
||||
|
||||
template<class P>
|
||||
struct less_pair {
|
||||
BOOST_UBLAS_INLINE
|
||||
bool operator () (const P &p1, const P &p2) {
|
||||
return p1.first < p2.first;
|
||||
}
|
||||
};
|
||||
template<class T>
|
||||
struct less_triple {
|
||||
BOOST_UBLAS_INLINE
|
||||
bool operator () (const T &t1, const T &t2) {
|
||||
return t1.first.first < t2.first.first ||
|
||||
(t1.first.first == t2.first.first && t1.first.second < t2.first.second);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#ifdef BOOST_UBLAS_STRICT_MAP_ARRAY
|
||||
template<class A>
|
||||
class sparse_storage_element:
|
||||
public container_reference<A> {
|
||||
public:
|
||||
typedef A array_type;
|
||||
typedef typename A::key_type index_type;
|
||||
typedef typename A::mapped_type data_value_type;
|
||||
// typedef const data_value_type &data_const_reference;
|
||||
typedef typename type_traits<data_value_type>::const_reference data_const_reference;
|
||||
typedef data_value_type &data_reference;
|
||||
typedef typename A::value_type value_type;
|
||||
typedef value_type *pointer;
|
||||
|
||||
// Construction and destruction
|
||||
BOOST_UBLAS_INLINE
|
||||
sparse_storage_element (array_type &a, pointer it):
|
||||
container_reference<array_type> (a), it_ (it), i_ (it->first), d_ (it->second), dirty_ (false) {}
|
||||
BOOST_UBLAS_INLINE
|
||||
sparse_storage_element (array_type &a, index_type i):
|
||||
container_reference<array_type> (a), it_ (), i_ (i), d_ (), dirty_ (false) {
|
||||
pointer it = (*this) ().find (i_);
|
||||
if (it == (*this) ().end ())
|
||||
it = (*this) ().insert ((*this) ().end (), value_type (i_, d_));
|
||||
d_ = it->second;
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
~sparse_storage_element () {
|
||||
if (dirty_) {
|
||||
if (! it_)
|
||||
it_ = (*this) ().find (i_);
|
||||
BOOST_UBLAS_CHECK (it_ != (*this) ().end (), internal_logic ());
|
||||
it_->second = d_;
|
||||
}
|
||||
}
|
||||
|
||||
// Element access - only if data_const_reference is defined
|
||||
BOOST_UBLAS_INLINE
|
||||
typename data_value_type::data_const_reference
|
||||
operator [] (index_type i) const {
|
||||
return d_ [i];
|
||||
}
|
||||
|
||||
// Assignment
|
||||
BOOST_UBLAS_INLINE
|
||||
sparse_storage_element &operator = (const sparse_storage_element &p) {
|
||||
// Overide the implict copy assignment
|
||||
d_ = p.d_;
|
||||
dirty_ = true;
|
||||
return *this;
|
||||
}
|
||||
template<class D>
|
||||
BOOST_UBLAS_INLINE
|
||||
sparse_storage_element &operator = (const D &d) {
|
||||
d_ = d;
|
||||
dirty_ = true;
|
||||
return *this;
|
||||
}
|
||||
template<class D>
|
||||
BOOST_UBLAS_INLINE
|
||||
sparse_storage_element &operator += (const D &d) {
|
||||
d_ += d;
|
||||
dirty_ = true;
|
||||
return *this;
|
||||
}
|
||||
template<class D>
|
||||
BOOST_UBLAS_INLINE
|
||||
sparse_storage_element &operator -= (const D &d) {
|
||||
d_ -= d;
|
||||
dirty_ = true;
|
||||
return *this;
|
||||
}
|
||||
template<class D>
|
||||
BOOST_UBLAS_INLINE
|
||||
sparse_storage_element &operator *= (const D &d) {
|
||||
d_ *= d;
|
||||
dirty_ = true;
|
||||
return *this;
|
||||
}
|
||||
template<class D>
|
||||
BOOST_UBLAS_INLINE
|
||||
sparse_storage_element &operator /= (const D &d) {
|
||||
d_ /= d;
|
||||
dirty_ = true;
|
||||
return *this;
|
||||
}
|
||||
|
||||
// Comparison
|
||||
template<class D>
|
||||
BOOST_UBLAS_INLINE
|
||||
bool operator == (const D &d) const {
|
||||
return d_ == d;
|
||||
}
|
||||
template<class D>
|
||||
BOOST_UBLAS_INLINE
|
||||
bool operator != (const D &d) const {
|
||||
return d_ != d;
|
||||
}
|
||||
|
||||
// Conversion
|
||||
BOOST_UBLAS_INLINE
|
||||
operator data_const_reference () const {
|
||||
return d_;
|
||||
}
|
||||
|
||||
// Swapping
|
||||
BOOST_UBLAS_INLINE
|
||||
void swap (sparse_storage_element p) {
|
||||
if (this != &p) {
|
||||
dirty_ = true;
|
||||
p.dirty_ = true;
|
||||
std::swap (d_, p.d_);
|
||||
}
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
friend void swap (sparse_storage_element p1, sparse_storage_element p2) {
|
||||
p1.swap (p2);
|
||||
}
|
||||
|
||||
private:
|
||||
pointer it_;
|
||||
index_type i_;
|
||||
data_value_type d_;
|
||||
bool dirty_;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
// Default map type is simply forwarded to std::map
|
||||
// FIXME should use ALLOC for map but std::allocator of std::pair<const I, T> and std::pair<I,T> fail to compile
|
||||
template<class I, class T, class ALLOC>
|
||||
class map_std : public std::map<I, T /*, ALLOC */> {
|
||||
public:
|
||||
// Serialization
|
||||
template<class Archive>
|
||||
void serialize(Archive & ar, const unsigned int /* file_version */){
|
||||
ar & serialization::make_nvp("base", boost::serialization::base_object< std::map<I, T /*, ALLOC */> >(*this));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
// Map array
|
||||
// Implementation requires pair<I, T> allocator definition (without const)
|
||||
template<class I, class T, class ALLOC>
|
||||
class map_array {
|
||||
public:
|
||||
typedef ALLOC allocator_type;
|
||||
typedef typename ALLOC::size_type size_type;
|
||||
typedef typename ALLOC::difference_type difference_type;
|
||||
typedef std::pair<I,T> value_type;
|
||||
typedef I key_type;
|
||||
typedef T mapped_type;
|
||||
typedef const value_type &const_reference;
|
||||
typedef value_type &reference;
|
||||
typedef const value_type *const_pointer;
|
||||
typedef value_type *pointer;
|
||||
// Iterators simply are pointers.
|
||||
typedef const_pointer const_iterator;
|
||||
typedef pointer iterator;
|
||||
|
||||
typedef const T &data_const_reference;
|
||||
#ifndef BOOST_UBLAS_STRICT_MAP_ARRAY
|
||||
typedef T &data_reference;
|
||||
#else
|
||||
typedef sparse_storage_element<map_array> data_reference;
|
||||
#endif
|
||||
|
||||
// Construction and destruction
|
||||
BOOST_UBLAS_INLINE
|
||||
map_array (const ALLOC &a = ALLOC()):
|
||||
alloc_(a), capacity_ (0), size_ (0) {
|
||||
data_ = 0;
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
map_array (const map_array &c):
|
||||
alloc_ (c.alloc_), capacity_ (c.size_), size_ (c.size_) {
|
||||
if (capacity_) {
|
||||
data_ = alloc_.allocate (capacity_);
|
||||
std::uninitialized_copy (data_, data_ + capacity_, c.data_);
|
||||
// capacity != size_ requires uninitialized_fill (size_ to capacity_)
|
||||
}
|
||||
else
|
||||
data_ = 0;
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
~map_array () {
|
||||
if (capacity_) {
|
||||
std::for_each (data_, data_ + capacity_, static_destroy);
|
||||
alloc_.deallocate (data_, capacity_);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
// Resizing - implicitly exposses uninitialized (but default constructed) mapped_type
|
||||
BOOST_UBLAS_INLINE
|
||||
void resize (size_type size) {
|
||||
BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
|
||||
if (size > capacity_) {
|
||||
const size_type capacity = size << 1;
|
||||
BOOST_UBLAS_CHECK (capacity, internal_logic ());
|
||||
pointer data = alloc_.allocate (capacity);
|
||||
std::uninitialized_copy (data_, data_ + (std::min) (size, size_), data);
|
||||
std::uninitialized_fill (data + (std::min) (size, size_), data + capacity, value_type ());
|
||||
|
||||
if (capacity_) {
|
||||
std::for_each (data_, data_ + capacity_, static_destroy);
|
||||
alloc_.deallocate (data_, capacity_);
|
||||
}
|
||||
capacity_ = capacity;
|
||||
data_ = data;
|
||||
}
|
||||
size_ = size;
|
||||
BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
|
||||
}
|
||||
public:
|
||||
|
||||
// Reserving
|
||||
BOOST_UBLAS_INLINE
|
||||
void reserve (size_type capacity) {
|
||||
BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
|
||||
// Reduce capacity_ if size_ allows
|
||||
BOOST_UBLAS_CHECK (capacity >= size_, bad_size ());
|
||||
pointer data;
|
||||
if (capacity) {
|
||||
data = alloc_.allocate (capacity);
|
||||
std::uninitialized_copy (data_, data_ + size_, data);
|
||||
std::uninitialized_fill (data + size_, data + capacity, value_type ());
|
||||
}
|
||||
else
|
||||
data = 0;
|
||||
|
||||
if (capacity_) {
|
||||
std::for_each (data_, data_ + capacity_, static_destroy);
|
||||
alloc_.deallocate (data_, capacity_);
|
||||
}
|
||||
capacity_ = capacity;
|
||||
data_ = data;
|
||||
BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
|
||||
}
|
||||
|
||||
// Random Access Container
|
||||
BOOST_UBLAS_INLINE
|
||||
size_type size () const {
|
||||
return size_;
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
size_type capacity () const {
|
||||
return capacity_;
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
size_type max_size () const {
|
||||
return 0; //TODO
|
||||
}
|
||||
|
||||
BOOST_UBLAS_INLINE
|
||||
bool empty () const {
|
||||
return size_ == 0;
|
||||
}
|
||||
|
||||
// Element access
|
||||
BOOST_UBLAS_INLINE
|
||||
data_reference operator [] (key_type i) {
|
||||
#ifndef BOOST_UBLAS_STRICT_MAP_ARRAY
|
||||
pointer it = find (i);
|
||||
if (it == end ())
|
||||
it = insert (end (), value_type (i, mapped_type (0)));
|
||||
BOOST_UBLAS_CHECK (it != end (), internal_logic ());
|
||||
return it->second;
|
||||
#else
|
||||
return data_reference (*this, i);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Assignment
|
||||
BOOST_UBLAS_INLINE
|
||||
map_array &operator = (const map_array &a) {
|
||||
if (this != &a) {
|
||||
resize (a.size_);
|
||||
std::copy (a.data_, a.data_ + a.size_, data_);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
map_array &assign_temporary (map_array &a) {
|
||||
swap (a);
|
||||
return *this;
|
||||
}
|
||||
|
||||
// Swapping
|
||||
BOOST_UBLAS_INLINE
|
||||
void swap (map_array &a) {
|
||||
if (this != &a) {
|
||||
std::swap (capacity_, a.capacity_);
|
||||
std::swap (data_, a.data_);
|
||||
std::swap (size_, a.size_);
|
||||
}
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
friend void swap (map_array &a1, map_array &a2) {
|
||||
a1.swap (a2);
|
||||
}
|
||||
|
||||
// Element insertion and deletion
|
||||
|
||||
// From Back Insertion Sequence concept
|
||||
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
||||
iterator push_back (iterator it, const value_type &p) {
|
||||
if (size () == 0 || (it = end () - 1)->first < p.first) {
|
||||
resize (size () + 1);
|
||||
*(it = end () - 1) = p;
|
||||
return it;
|
||||
}
|
||||
external_logic ().raise ();
|
||||
return it;
|
||||
}
|
||||
// Form Unique Associative Container concept
|
||||
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
||||
std::pair<iterator,bool> insert (const value_type &p) {
|
||||
iterator it = detail::lower_bound (begin (), end (), p, detail::less_pair<value_type> ());
|
||||
if (it != end () && it->first == p.first)
|
||||
return std::make_pair (it, false);
|
||||
difference_type n = it - begin ();
|
||||
resize (size () + 1);
|
||||
it = begin () + n; // allow for invalidation
|
||||
std::copy_backward (it, end () - 1, end ());
|
||||
*it = p;
|
||||
return std::make_pair (it, true);
|
||||
}
|
||||
// Form Sorted Associative Container concept
|
||||
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
||||
iterator insert (iterator hint, const value_type &p) {
|
||||
return insert (p).first;
|
||||
}
|
||||
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
||||
void erase (iterator it) {
|
||||
BOOST_UBLAS_CHECK (begin () <= it && it < end (), bad_index ());
|
||||
std::copy (it + 1, end (), it);
|
||||
resize (size () - 1);
|
||||
}
|
||||
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
||||
void erase (iterator it1, iterator it2) {
|
||||
if (it1 == it2) return /* nothing to erase */;
|
||||
BOOST_UBLAS_CHECK (begin () <= it1 && it1 < it2 && it2 <= end (), bad_index ());
|
||||
std::copy (it2, end (), it1);
|
||||
resize (size () - (it2 - it1));
|
||||
}
|
||||
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
||||
void clear () {
|
||||
resize (0);
|
||||
}
|
||||
|
||||
// Element lookup
|
||||
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
||||
const_iterator find (key_type i) const {
|
||||
const_iterator it (detail::lower_bound (begin (), end (), value_type (i, mapped_type (0)), detail::less_pair<value_type> ()));
|
||||
if (it == end () || it->first != i)
|
||||
it = end ();
|
||||
return it;
|
||||
}
|
||||
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
||||
iterator find (key_type i) {
|
||||
iterator it (detail::lower_bound (begin (), end (), value_type (i, mapped_type (0)), detail::less_pair<value_type> ()));
|
||||
if (it == end () || it->first != i)
|
||||
it = end ();
|
||||
return it;
|
||||
}
|
||||
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
||||
const_iterator lower_bound (key_type i) const {
|
||||
return detail::lower_bound (begin (), end (), value_type (i, mapped_type (0)), detail::less_pair<value_type> ());
|
||||
}
|
||||
// BOOST_UBLAS_INLINE This function seems to be big. So we do not let the compiler inline it.
|
||||
iterator lower_bound (key_type i) {
|
||||
return detail::lower_bound (begin (), end (), value_type (i, mapped_type (0)), detail::less_pair<value_type> ());
|
||||
}
|
||||
|
||||
BOOST_UBLAS_INLINE
|
||||
const_iterator begin () const {
|
||||
return data_;
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
const_iterator cbegin () const {
|
||||
return begin ();
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
const_iterator end () const {
|
||||
return data_ + size_;
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
const_iterator cend () const {
|
||||
return end ();
|
||||
}
|
||||
|
||||
BOOST_UBLAS_INLINE
|
||||
iterator begin () {
|
||||
return data_;
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
iterator end () {
|
||||
return data_ + size_;
|
||||
}
|
||||
|
||||
// Reverse iterators
|
||||
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
||||
typedef std::reverse_iterator<iterator> reverse_iterator;
|
||||
|
||||
BOOST_UBLAS_INLINE
|
||||
const_reverse_iterator rbegin () const {
|
||||
return const_reverse_iterator (end ());
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
const_reverse_iterator crbegin () const {
|
||||
return rbegin ();
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
const_reverse_iterator rend () const {
|
||||
return const_reverse_iterator (begin ());
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
const_reverse_iterator crend () const {
|
||||
return rend ();
|
||||
}
|
||||
|
||||
BOOST_UBLAS_INLINE
|
||||
reverse_iterator rbegin () {
|
||||
return reverse_iterator (end ());
|
||||
}
|
||||
BOOST_UBLAS_INLINE
|
||||
reverse_iterator rend () {
|
||||
return reverse_iterator (begin ());
|
||||
}
|
||||
|
||||
// Allocator
|
||||
allocator_type get_allocator () {
|
||||
return alloc_;
|
||||
}
|
||||
|
||||
// Serialization
|
||||
template<class Archive>
|
||||
void serialize(Archive & ar, const unsigned int /* file_version */){
|
||||
serialization::collection_size_type s (size_);
|
||||
ar & serialization::make_nvp("size",s);
|
||||
if (Archive::is_loading::value) {
|
||||
resize(s);
|
||||
}
|
||||
ar & serialization::make_array(data_, s);
|
||||
}
|
||||
|
||||
private:
|
||||
// Provide destroy as a non member function
|
||||
BOOST_UBLAS_INLINE
|
||||
static void static_destroy (reference p) {
|
||||
(&p) -> ~value_type ();
|
||||
}
|
||||
ALLOC alloc_;
|
||||
size_type capacity_;
|
||||
pointer data_;
|
||||
size_type size_;
|
||||
};
|
||||
|
||||
|
||||
namespace detail {
|
||||
template<class A, class T>
|
||||
struct map_traits {
|
||||
typedef typename A::mapped_type &reference;
|
||||
};
|
||||
template<class I, class T, class ALLOC>
|
||||
struct map_traits<map_array<I, T, ALLOC>, T > {
|
||||
typedef typename map_array<I, T, ALLOC>::data_reference reference;
|
||||
};
|
||||
|
||||
// reserve helpers for map_array and generic maps
|
||||
// ISSUE should be in map_traits but want to use on all compilers
|
||||
|
||||
template<class M>
|
||||
BOOST_UBLAS_INLINE
|
||||
void map_reserve (M &/* m */, typename M::size_type /* capacity */) {
|
||||
}
|
||||
template<class I, class T, class ALLOC>
|
||||
BOOST_UBLAS_INLINE
|
||||
void map_reserve (map_array<I, T, ALLOC> &m, typename map_array<I, T, ALLOC>::size_type capacity) {
|
||||
m.reserve (capacity);
|
||||
}
|
||||
|
||||
template<class M>
|
||||
struct map_capacity_traits {
|
||||
typedef typename M::size_type type ;
|
||||
type operator() ( M const& m ) const {
|
||||
return m.size ();
|
||||
}
|
||||
} ;
|
||||
|
||||
template<class I, class T, class ALLOC>
|
||||
struct map_capacity_traits< map_array<I, T, ALLOC> > {
|
||||
typedef typename map_array<I, T, ALLOC>::size_type type ;
|
||||
type operator() ( map_array<I, T, ALLOC> const& m ) const {
|
||||
return m.capacity ();
|
||||
}
|
||||
} ;
|
||||
|
||||
template<class M>
|
||||
BOOST_UBLAS_INLINE
|
||||
typename map_capacity_traits<M>::type map_capacity (M const& m) {
|
||||
return map_capacity_traits<M>() ( m );
|
||||
}
|
||||
}
|
||||
|
||||
}}}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,46 @@
|
||||
// -*- Mode: C++ -*-
|
||||
#ifndef DISPLAYTEXT_H
|
||||
#define DISPLAYTEXT_H
|
||||
|
||||
#include <QTextEdit>
|
||||
#include <QFont>
|
||||
|
||||
#include "logbook/logbook.h"
|
||||
#include "decodedtext.h"
|
||||
|
||||
class QAction;
|
||||
|
||||
class DisplayText
|
||||
: public QTextEdit
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit DisplayText(QWidget *parent = 0);
|
||||
|
||||
void setContentFont (QFont const&);
|
||||
void insertLineSpacer(QString const&);
|
||||
void displayDecodedText(DecodedText const& decodedText, QString const& myCall, bool displayDXCCEntity,
|
||||
LogBook const& logBook, QColor color_CQ, QColor color_MyCall,
|
||||
QColor color_DXCC, QColor color_NewCall);
|
||||
void displayTransmittedText(QString text, QString modeTx, qint32 txFreq,
|
||||
QColor color_TxMsg, bool bFastMode);
|
||||
void displayQSY(QString text);
|
||||
|
||||
Q_SIGNAL void selectCallsign (Qt::KeyboardModifiers);
|
||||
Q_SIGNAL void erased ();
|
||||
|
||||
Q_SLOT void appendText (QString const& text, QColor bg = Qt::white);
|
||||
Q_SLOT void erase ();
|
||||
|
||||
protected:
|
||||
void mouseDoubleClickEvent(QMouseEvent *e);
|
||||
|
||||
private:
|
||||
QString appendDXCCWorkedB4(QString message, QString const& callsign, QColor * bg, LogBook const& logBook,
|
||||
QColor color_CQ, QColor color_DXCC, QColor color_NewCall);
|
||||
|
||||
QFont char_font_;
|
||||
QAction * erase_action_;
|
||||
};
|
||||
|
||||
#endif // DISPLAYTEXT_H
|
||||
@@ -0,0 +1,112 @@
|
||||
// (C) Copyright John Maddock 2007.
|
||||
// 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 file is machine generated, do not edit by hand
|
||||
|
||||
// Polynomial evaluation using second order Horners rule
|
||||
#ifndef BOOST_MATH_TOOLS_RAT_EVAL_8_HPP
|
||||
#define BOOST_MATH_TOOLS_RAT_EVAL_8_HPP
|
||||
|
||||
namespace boost{ namespace math{ namespace tools{ namespace detail{
|
||||
|
||||
template <class T, class U, class V>
|
||||
inline V evaluate_rational_c_imp(const T*, const U*, const V&, const mpl::int_<0>*) BOOST_MATH_NOEXCEPT(V)
|
||||
{
|
||||
return static_cast<V>(0);
|
||||
}
|
||||
|
||||
template <class T, class U, class V>
|
||||
inline V evaluate_rational_c_imp(const T* a, const U* b, const V&, const mpl::int_<1>*) BOOST_MATH_NOEXCEPT(V)
|
||||
{
|
||||
return static_cast<V>(a[0]) / static_cast<V>(b[0]);
|
||||
}
|
||||
|
||||
template <class T, class U, class V>
|
||||
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<2>*) BOOST_MATH_NOEXCEPT(V)
|
||||
{
|
||||
return static_cast<V>((a[1] * x + a[0]) / (b[1] * x + b[0]));
|
||||
}
|
||||
|
||||
template <class T, class U, class V>
|
||||
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<3>*) BOOST_MATH_NOEXCEPT(V)
|
||||
{
|
||||
return static_cast<V>(((a[2] * x + a[1]) * x + a[0]) / ((b[2] * x + b[1]) * x + b[0]));
|
||||
}
|
||||
|
||||
template <class T, class U, class V>
|
||||
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<4>*) BOOST_MATH_NOEXCEPT(V)
|
||||
{
|
||||
return static_cast<V>((((a[3] * x + a[2]) * x + a[1]) * x + a[0]) / (((b[3] * x + b[2]) * x + b[1]) * x + b[0]));
|
||||
}
|
||||
|
||||
template <class T, class U, class V>
|
||||
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<5>*) BOOST_MATH_NOEXCEPT(V)
|
||||
{
|
||||
if(x <= 1)
|
||||
{
|
||||
V x2 = x * x;
|
||||
return static_cast<V>(((a[4] * x2 + a[2]) * x2 + a[0] + (a[3] * x2 + a[1]) * x) / ((b[4] * x2 + b[2]) * x2 + b[0] + (b[3] * x2 + b[1]) * x));
|
||||
}
|
||||
else
|
||||
{
|
||||
V z = 1 / x;
|
||||
V z2 = 1 / (x * x);
|
||||
return static_cast<V>(((a[0] * z2 + a[2]) * z2 + a[4] + (a[1] * z2 + a[3]) * z) / ((b[0] * z2 + b[2]) * z2 + b[4] + (b[1] * z2 + b[3]) * z));
|
||||
}
|
||||
}
|
||||
|
||||
template <class T, class U, class V>
|
||||
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<6>*) BOOST_MATH_NOEXCEPT(V)
|
||||
{
|
||||
if(x <= 1)
|
||||
{
|
||||
V x2 = x * x;
|
||||
return static_cast<V>((((a[5] * x2 + a[3]) * x2 + a[1]) * x + (a[4] * x2 + a[2]) * x2 + a[0]) / (((b[5] * x2 + b[3]) * x2 + b[1]) * x + (b[4] * x2 + b[2]) * x2 + b[0]));
|
||||
}
|
||||
else
|
||||
{
|
||||
V z = 1 / x;
|
||||
V z2 = 1 / (x * x);
|
||||
return static_cast<V>((((a[0] * z2 + a[2]) * z2 + a[4]) * z + (a[1] * z2 + a[3]) * z2 + a[5]) / (((b[0] * z2 + b[2]) * z2 + b[4]) * z + (b[1] * z2 + b[3]) * z2 + b[5]));
|
||||
}
|
||||
}
|
||||
|
||||
template <class T, class U, class V>
|
||||
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<7>*) BOOST_MATH_NOEXCEPT(V)
|
||||
{
|
||||
if(x <= 1)
|
||||
{
|
||||
V x2 = x * x;
|
||||
return static_cast<V>((((a[6] * x2 + a[4]) * x2 + a[2]) * x2 + a[0] + ((a[5] * x2 + a[3]) * x2 + a[1]) * x) / (((b[6] * x2 + b[4]) * x2 + b[2]) * x2 + b[0] + ((b[5] * x2 + b[3]) * x2 + b[1]) * x));
|
||||
}
|
||||
else
|
||||
{
|
||||
V z = 1 / x;
|
||||
V z2 = 1 / (x * x);
|
||||
return static_cast<V>((((a[0] * z2 + a[2]) * z2 + a[4]) * z2 + a[6] + ((a[1] * z2 + a[3]) * z2 + a[5]) * z) / (((b[0] * z2 + b[2]) * z2 + b[4]) * z2 + b[6] + ((b[1] * z2 + b[3]) * z2 + b[5]) * z));
|
||||
}
|
||||
}
|
||||
|
||||
template <class T, class U, class V>
|
||||
inline V evaluate_rational_c_imp(const T* a, const U* b, const V& x, const mpl::int_<8>*) BOOST_MATH_NOEXCEPT(V)
|
||||
{
|
||||
if(x <= 1)
|
||||
{
|
||||
V x2 = x * x;
|
||||
return static_cast<V>(((((a[7] * x2 + a[5]) * x2 + a[3]) * x2 + a[1]) * x + ((a[6] * x2 + a[4]) * x2 + a[2]) * x2 + a[0]) / ((((b[7] * x2 + b[5]) * x2 + b[3]) * x2 + b[1]) * x + ((b[6] * x2 + b[4]) * x2 + b[2]) * x2 + b[0]));
|
||||
}
|
||||
else
|
||||
{
|
||||
V z = 1 / x;
|
||||
V z2 = 1 / (x * x);
|
||||
return static_cast<V>(((((a[0] * z2 + a[2]) * z2 + a[4]) * z2 + a[6]) * z + ((a[1] * z2 + a[3]) * z2 + a[5]) * z2 + a[7]) / ((((b[0] * z2 + b[2]) * z2 + b[4]) * z2 + b[6]) * z + ((b[1] * z2 + b[3]) * z2 + b[5]) * z2 + b[7]));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}}}} // namespaces
|
||||
|
||||
#endif // include guard
|
||||
|
||||
@@ -0,0 +1,311 @@
|
||||
//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.
|
||||
|
||||
//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 UUID_8D22C4CA9CC811DCAA9133D256D89593
|
||||
#define UUID_8D22C4CA9CC811DCAA9133D256D89593
|
||||
#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
||||
#pragma GCC system_header
|
||||
#endif
|
||||
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
||||
#pragma warning(push,1)
|
||||
#endif
|
||||
|
||||
#include <boost/exception/exception.hpp>
|
||||
#include <boost/exception/to_string_stub.hpp>
|
||||
#include <boost/exception/detail/error_info_impl.hpp>
|
||||
#include <boost/exception/detail/shared_ptr.hpp>
|
||||
#include <boost/config.hpp>
|
||||
#include <map>
|
||||
|
||||
namespace
|
||||
boost
|
||||
{
|
||||
template <class Tag,class T>
|
||||
inline
|
||||
std::string
|
||||
error_info_name( error_info<Tag,T> const & x )
|
||||
{
|
||||
return tag_type_name<Tag>();
|
||||
}
|
||||
|
||||
template <class Tag,class T>
|
||||
inline
|
||||
std::string
|
||||
to_string( error_info<Tag,T> const & x )
|
||||
{
|
||||
return '[' + error_info_name(x) + "] = " + to_string_stub(x.value()) + '\n';
|
||||
}
|
||||
|
||||
template <class Tag,class T>
|
||||
inline
|
||||
error_info<Tag,T>::
|
||||
error_info( value_type const & value ):
|
||||
value_(value)
|
||||
{
|
||||
}
|
||||
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
template <class Tag,class T>
|
||||
inline
|
||||
error_info<Tag,T>::
|
||||
error_info( error_info const & x ):
|
||||
value_(x.value_)
|
||||
{
|
||||
}
|
||||
template <class Tag,class T>
|
||||
inline
|
||||
error_info<Tag,T>::
|
||||
error_info( value_type && value ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(value)))):
|
||||
value_(std::move(value))
|
||||
{
|
||||
}
|
||||
template <class Tag,class T>
|
||||
inline
|
||||
error_info<Tag,T>::
|
||||
error_info( error_info && x ) BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(value_type(std::move(x.value_)))):
|
||||
value_(std::move(x.value_))
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
template <class Tag,class T>
|
||||
inline
|
||||
error_info<Tag,T>::
|
||||
~error_info() throw()
|
||||
{
|
||||
}
|
||||
|
||||
template <class Tag,class T>
|
||||
inline
|
||||
std::string
|
||||
error_info<Tag,T>::
|
||||
name_value_string() const
|
||||
{
|
||||
return to_string_stub(*this);
|
||||
}
|
||||
|
||||
namespace
|
||||
exception_detail
|
||||
{
|
||||
class
|
||||
error_info_container_impl:
|
||||
public error_info_container
|
||||
{
|
||||
public:
|
||||
|
||||
error_info_container_impl():
|
||||
count_(0)
|
||||
{
|
||||
}
|
||||
|
||||
~error_info_container_impl() throw()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
set( shared_ptr<error_info_base> const & x, type_info_ const & typeid_ )
|
||||
{
|
||||
BOOST_ASSERT(x);
|
||||
info_[typeid_] = x;
|
||||
diagnostic_info_str_.clear();
|
||||
}
|
||||
|
||||
shared_ptr<error_info_base>
|
||||
get( type_info_ const & ti ) const
|
||||
{
|
||||
error_info_map::const_iterator i=info_.find(ti);
|
||||
if( info_.end()!=i )
|
||||
{
|
||||
shared_ptr<error_info_base> const & p = i->second;
|
||||
#ifndef BOOST_NO_RTTI
|
||||
BOOST_ASSERT( *BOOST_EXCEPTION_DYNAMIC_TYPEID(*p).type_==*ti.type_ );
|
||||
#endif
|
||||
return p;
|
||||
}
|
||||
return shared_ptr<error_info_base>();
|
||||
}
|
||||
|
||||
char const *
|
||||
diagnostic_information( char const * header ) const
|
||||
{
|
||||
if( header )
|
||||
{
|
||||
std::ostringstream tmp;
|
||||
tmp << header;
|
||||
for( error_info_map::const_iterator i=info_.begin(),end=info_.end(); i!=end; ++i )
|
||||
{
|
||||
error_info_base const & x = *i->second;
|
||||
tmp << x.name_value_string();
|
||||
}
|
||||
tmp.str().swap(diagnostic_info_str_);
|
||||
}
|
||||
return diagnostic_info_str_.c_str();
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
friend class boost::exception;
|
||||
|
||||
typedef std::map< type_info_, shared_ptr<error_info_base> > error_info_map;
|
||||
error_info_map info_;
|
||||
mutable std::string diagnostic_info_str_;
|
||||
mutable int count_;
|
||||
|
||||
error_info_container_impl( error_info_container_impl const & );
|
||||
error_info_container_impl & operator=( error_info_container const & );
|
||||
|
||||
void
|
||||
add_ref() const
|
||||
{
|
||||
++count_;
|
||||
}
|
||||
|
||||
bool
|
||||
release() const
|
||||
{
|
||||
if( --count_ )
|
||||
return false;
|
||||
else
|
||||
{
|
||||
delete this;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
refcount_ptr<error_info_container>
|
||||
clone() const
|
||||
{
|
||||
refcount_ptr<error_info_container> p;
|
||||
error_info_container_impl * c=new error_info_container_impl;
|
||||
p.adopt(c);
|
||||
c->info_ = info_;
|
||||
return p;
|
||||
}
|
||||
};
|
||||
|
||||
template <class E,class Tag,class T>
|
||||
inline
|
||||
E const &
|
||||
set_info( E const & x, error_info<Tag,T> const & v )
|
||||
{
|
||||
typedef error_info<Tag,T> error_info_tag_t;
|
||||
shared_ptr<error_info_tag_t> p( new error_info_tag_t(v) );
|
||||
exception_detail::error_info_container * c=x.data_.get();
|
||||
if( !c )
|
||||
x.data_.adopt(c=new exception_detail::error_info_container_impl);
|
||||
c->set(p,BOOST_EXCEPTION_STATIC_TYPEID(error_info_tag_t));
|
||||
return x;
|
||||
}
|
||||
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
template <class E,class Tag,class T>
|
||||
E const & set_info( E const &, error_info<Tag,T> && );
|
||||
template <class T>
|
||||
struct set_info_rv;
|
||||
template <class Tag,class T>
|
||||
struct
|
||||
set_info_rv<error_info<Tag,T> >
|
||||
{
|
||||
template <class E,class Tag1,class T1>
|
||||
friend E const & set_info( E const &, error_info<Tag1,T1> && );
|
||||
template <class E>
|
||||
static
|
||||
E const &
|
||||
set( E const & x, error_info<Tag,T> && v )
|
||||
{
|
||||
typedef error_info<Tag,T> error_info_tag_t;
|
||||
shared_ptr<error_info_tag_t> p( new error_info_tag_t(std::move(v)) );
|
||||
exception_detail::error_info_container * c=x.data_.get();
|
||||
if( !c )
|
||||
x.data_.adopt(c=new exception_detail::error_info_container_impl);
|
||||
c->set(p,BOOST_EXCEPTION_STATIC_TYPEID(error_info_tag_t));
|
||||
return x;
|
||||
}
|
||||
};
|
||||
template <>
|
||||
struct
|
||||
set_info_rv<throw_function>
|
||||
{
|
||||
template <class E,class Tag1,class T1>
|
||||
friend E const & set_info( E const &, error_info<Tag1,T1> && );
|
||||
template <class E>
|
||||
static
|
||||
E const &
|
||||
set( E const & x, throw_function && y )
|
||||
{
|
||||
x.throw_function_=y.v_;
|
||||
return x;
|
||||
}
|
||||
};
|
||||
template <>
|
||||
struct
|
||||
set_info_rv<throw_file>
|
||||
{
|
||||
template <class E,class Tag1,class T1>
|
||||
friend E const & set_info( E const &, error_info<Tag1,T1> && );
|
||||
template <class E>
|
||||
static
|
||||
E const &
|
||||
set( E const & x, throw_file && y )
|
||||
{
|
||||
x.throw_file_=y.v_;
|
||||
return x;
|
||||
}
|
||||
};
|
||||
template <>
|
||||
struct
|
||||
set_info_rv<throw_line>
|
||||
{
|
||||
template <class E,class Tag1,class T1>
|
||||
friend E const & set_info( E const &, error_info<Tag1,T1> && );
|
||||
template <class E>
|
||||
static
|
||||
E const &
|
||||
set( E const & x, throw_line && y )
|
||||
{
|
||||
x.throw_line_=y.v_;
|
||||
return x;
|
||||
}
|
||||
};
|
||||
template <class E,class Tag,class T>
|
||||
inline
|
||||
E const &
|
||||
set_info( E const & x, error_info<Tag,T> && v )
|
||||
{
|
||||
return set_info_rv<error_info<Tag,T> >::template set<E>(x,std::move(v));
|
||||
}
|
||||
#endif
|
||||
|
||||
template <class T>
|
||||
struct
|
||||
derives_boost_exception
|
||||
{
|
||||
enum e { value = (sizeof(dispatch_boost_exception((T*)0))==sizeof(large_size)) };
|
||||
};
|
||||
}
|
||||
|
||||
template <class E,class Tag,class T>
|
||||
inline
|
||||
typename enable_if<exception_detail::derives_boost_exception<E>,E const &>::type
|
||||
operator<<( E const & x, error_info<Tag,T> const & v )
|
||||
{
|
||||
return exception_detail::set_info(x,v);
|
||||
}
|
||||
|
||||
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
|
||||
template <class E,class Tag,class T>
|
||||
inline
|
||||
typename enable_if<exception_detail::derives_boost_exception<E>,E const &>::type
|
||||
operator<<( E const & x, error_info<Tag,T> && v )
|
||||
{
|
||||
return exception_detail::set_info(x,std::move(v));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,410 @@
|
||||
// boost\math\distributions\non_central_f.hpp
|
||||
|
||||
// Copyright John Maddock 2008.
|
||||
|
||||
// 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_MATH_SPECIAL_NON_CENTRAL_F_HPP
|
||||
#define BOOST_MATH_SPECIAL_NON_CENTRAL_F_HPP
|
||||
|
||||
#include <boost/math/distributions/non_central_beta.hpp>
|
||||
#include <boost/math/distributions/detail/generic_mode.hpp>
|
||||
#include <boost/math/special_functions/pow.hpp>
|
||||
|
||||
namespace boost
|
||||
{
|
||||
namespace math
|
||||
{
|
||||
template <class RealType = double, class Policy = policies::policy<> >
|
||||
class non_central_f_distribution
|
||||
{
|
||||
public:
|
||||
typedef RealType value_type;
|
||||
typedef Policy policy_type;
|
||||
|
||||
non_central_f_distribution(RealType v1_, RealType v2_, RealType lambda) : v1(v1_), v2(v2_), ncp(lambda)
|
||||
{
|
||||
const char* function = "boost::math::non_central_f_distribution<%1%>::non_central_f_distribution(%1%,%1%)";
|
||||
RealType r;
|
||||
detail::check_df(
|
||||
function,
|
||||
v1, &r, Policy());
|
||||
detail::check_df(
|
||||
function,
|
||||
v2, &r, Policy());
|
||||
detail::check_non_centrality(
|
||||
function,
|
||||
lambda,
|
||||
&r,
|
||||
Policy());
|
||||
} // non_central_f_distribution constructor.
|
||||
|
||||
RealType degrees_of_freedom1()const
|
||||
{
|
||||
return v1;
|
||||
}
|
||||
RealType degrees_of_freedom2()const
|
||||
{
|
||||
return v2;
|
||||
}
|
||||
RealType non_centrality() const
|
||||
{ // Private data getter function.
|
||||
return ncp;
|
||||
}
|
||||
private:
|
||||
// Data member, initialized by constructor.
|
||||
RealType v1; // alpha.
|
||||
RealType v2; // beta.
|
||||
RealType ncp; // non-centrality parameter
|
||||
}; // template <class RealType, class Policy> class non_central_f_distribution
|
||||
|
||||
typedef non_central_f_distribution<double> non_central_f; // Reserved name of type double.
|
||||
|
||||
// Non-member functions to give properties of the distribution.
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline const std::pair<RealType, RealType> range(const non_central_f_distribution<RealType, Policy>& /* dist */)
|
||||
{ // Range of permissible values for random variable k.
|
||||
using boost::math::tools::max_value;
|
||||
return std::pair<RealType, RealType>(static_cast<RealType>(0), max_value<RealType>());
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline const std::pair<RealType, RealType> support(const non_central_f_distribution<RealType, Policy>& /* dist */)
|
||||
{ // Range of supported values for random variable k.
|
||||
// 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>());
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType mean(const non_central_f_distribution<RealType, Policy>& dist)
|
||||
{
|
||||
const char* function = "mean(non_central_f_distribution<%1%> const&)";
|
||||
RealType v1 = dist.degrees_of_freedom1();
|
||||
RealType v2 = dist.degrees_of_freedom2();
|
||||
RealType l = dist.non_centrality();
|
||||
RealType r;
|
||||
if(!detail::check_df(
|
||||
function,
|
||||
v1, &r, Policy())
|
||||
||
|
||||
!detail::check_df(
|
||||
function,
|
||||
v2, &r, Policy())
|
||||
||
|
||||
!detail::check_non_centrality(
|
||||
function,
|
||||
l,
|
||||
&r,
|
||||
Policy()))
|
||||
return r;
|
||||
if(v2 <= 2)
|
||||
return policies::raise_domain_error(
|
||||
function,
|
||||
"Second degrees of freedom parameter was %1%, but must be > 2 !",
|
||||
v2, Policy());
|
||||
return v2 * (v1 + l) / (v1 * (v2 - 2));
|
||||
} // mean
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType mode(const non_central_f_distribution<RealType, Policy>& dist)
|
||||
{ // mode.
|
||||
static const char* function = "mode(non_central_chi_squared_distribution<%1%> const&)";
|
||||
|
||||
RealType n = dist.degrees_of_freedom1();
|
||||
RealType m = dist.degrees_of_freedom2();
|
||||
RealType l = dist.non_centrality();
|
||||
RealType r;
|
||||
if(!detail::check_df(
|
||||
function,
|
||||
n, &r, Policy())
|
||||
||
|
||||
!detail::check_df(
|
||||
function,
|
||||
m, &r, Policy())
|
||||
||
|
||||
!detail::check_non_centrality(
|
||||
function,
|
||||
l,
|
||||
&r,
|
||||
Policy()))
|
||||
return r;
|
||||
RealType guess = m > 2 ? RealType(m * (n + l) / (n * (m - 2))) : RealType(1);
|
||||
return detail::generic_find_mode(
|
||||
dist,
|
||||
guess,
|
||||
function);
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType variance(const non_central_f_distribution<RealType, Policy>& dist)
|
||||
{ // variance.
|
||||
const char* function = "variance(non_central_f_distribution<%1%> const&)";
|
||||
RealType n = dist.degrees_of_freedom1();
|
||||
RealType m = dist.degrees_of_freedom2();
|
||||
RealType l = dist.non_centrality();
|
||||
RealType r;
|
||||
if(!detail::check_df(
|
||||
function,
|
||||
n, &r, Policy())
|
||||
||
|
||||
!detail::check_df(
|
||||
function,
|
||||
m, &r, Policy())
|
||||
||
|
||||
!detail::check_non_centrality(
|
||||
function,
|
||||
l,
|
||||
&r,
|
||||
Policy()))
|
||||
return r;
|
||||
if(m <= 4)
|
||||
return policies::raise_domain_error(
|
||||
function,
|
||||
"Second degrees of freedom parameter was %1%, but must be > 4 !",
|
||||
m, Policy());
|
||||
RealType result = 2 * m * m * ((n + l) * (n + l)
|
||||
+ (m - 2) * (n + 2 * l));
|
||||
result /= (m - 4) * (m - 2) * (m - 2) * n * n;
|
||||
return result;
|
||||
}
|
||||
|
||||
// RealType standard_deviation(const non_central_f_distribution<RealType, Policy>& dist)
|
||||
// standard_deviation provided by derived accessors.
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType skewness(const non_central_f_distribution<RealType, Policy>& dist)
|
||||
{ // skewness = sqrt(l).
|
||||
const char* function = "skewness(non_central_f_distribution<%1%> const&)";
|
||||
BOOST_MATH_STD_USING
|
||||
RealType n = dist.degrees_of_freedom1();
|
||||
RealType m = dist.degrees_of_freedom2();
|
||||
RealType l = dist.non_centrality();
|
||||
RealType r;
|
||||
if(!detail::check_df(
|
||||
function,
|
||||
n, &r, Policy())
|
||||
||
|
||||
!detail::check_df(
|
||||
function,
|
||||
m, &r, Policy())
|
||||
||
|
||||
!detail::check_non_centrality(
|
||||
function,
|
||||
l,
|
||||
&r,
|
||||
Policy()))
|
||||
return r;
|
||||
if(m <= 6)
|
||||
return policies::raise_domain_error(
|
||||
function,
|
||||
"Second degrees of freedom parameter was %1%, but must be > 6 !",
|
||||
m, Policy());
|
||||
RealType result = 2 * constants::root_two<RealType>();
|
||||
result *= sqrt(m - 4);
|
||||
result *= (n * (m + n - 2) *(m + 2 * n - 2)
|
||||
+ 3 * (m + n - 2) * (m + 2 * n - 2) * l
|
||||
+ 6 * (m + n - 2) * l * l + 2 * l * l * l);
|
||||
result /= (m - 6) * pow(n * (m + n - 2) + 2 * (m + n - 2) * l + l * l, RealType(1.5f));
|
||||
return result;
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType kurtosis_excess(const non_central_f_distribution<RealType, Policy>& dist)
|
||||
{
|
||||
const char* function = "kurtosis_excess(non_central_f_distribution<%1%> const&)";
|
||||
BOOST_MATH_STD_USING
|
||||
RealType n = dist.degrees_of_freedom1();
|
||||
RealType m = dist.degrees_of_freedom2();
|
||||
RealType l = dist.non_centrality();
|
||||
RealType r;
|
||||
if(!detail::check_df(
|
||||
function,
|
||||
n, &r, Policy())
|
||||
||
|
||||
!detail::check_df(
|
||||
function,
|
||||
m, &r, Policy())
|
||||
||
|
||||
!detail::check_non_centrality(
|
||||
function,
|
||||
l,
|
||||
&r,
|
||||
Policy()))
|
||||
return r;
|
||||
if(m <= 8)
|
||||
return policies::raise_domain_error(
|
||||
function,
|
||||
"Second degrees of freedom parameter was %1%, but must be > 8 !",
|
||||
m, Policy());
|
||||
RealType l2 = l * l;
|
||||
RealType l3 = l2 * l;
|
||||
RealType l4 = l2 * l2;
|
||||
RealType result = (3 * (m - 4) * (n * (m + n - 2)
|
||||
* (4 * (m - 2) * (m - 2)
|
||||
+ (m - 2) * (m + 10) * n
|
||||
+ (10 + m) * n * n)
|
||||
+ 4 * (m + n - 2) * (4 * (m - 2) * (m - 2)
|
||||
+ (m - 2) * (10 + m) * n
|
||||
+ (10 + m) * n * n) * l + 2 * (10 + m)
|
||||
* (m + n - 2) * (2 * m + 3 * n - 4) * l2
|
||||
+ 4 * (10 + m) * (-2 + m + n) * l3
|
||||
+ (10 + m) * l4))
|
||||
/
|
||||
((-8 + m) * (-6 + m) * boost::math::pow<2>(n * (-2 + m + n)
|
||||
+ 2 * (-2 + m + n) * l + l2));
|
||||
return result;
|
||||
} // kurtosis_excess
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType kurtosis(const non_central_f_distribution<RealType, Policy>& dist)
|
||||
{
|
||||
return kurtosis_excess(dist) + 3;
|
||||
}
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType pdf(const non_central_f_distribution<RealType, Policy>& dist, const RealType& x)
|
||||
{ // Probability Density/Mass Function.
|
||||
typedef typename policies::evaluation<RealType, Policy>::type value_type;
|
||||
typedef typename policies::normalise<
|
||||
Policy,
|
||||
policies::promote_float<false>,
|
||||
policies::promote_double<false>,
|
||||
policies::discrete_quantile<>,
|
||||
policies::assert_undefined<> >::type forwarding_policy;
|
||||
|
||||
value_type alpha = dist.degrees_of_freedom1() / 2;
|
||||
value_type beta = dist.degrees_of_freedom2() / 2;
|
||||
value_type y = x * alpha / beta;
|
||||
value_type r = pdf(boost::math::non_central_beta_distribution<value_type, forwarding_policy>(alpha, beta, dist.non_centrality()), y / (1 + y));
|
||||
return policies::checked_narrowing_cast<RealType, forwarding_policy>(
|
||||
r * (dist.degrees_of_freedom1() / dist.degrees_of_freedom2()) / ((1 + y) * (1 + y)),
|
||||
"pdf(non_central_f_distribution<%1%>, %1%)");
|
||||
} // pdf
|
||||
|
||||
template <class RealType, class Policy>
|
||||
RealType cdf(const non_central_f_distribution<RealType, Policy>& dist, const RealType& x)
|
||||
{
|
||||
const char* function = "cdf(const non_central_f_distribution<%1%>&, %1%)";
|
||||
RealType r;
|
||||
if(!detail::check_df(
|
||||
function,
|
||||
dist.degrees_of_freedom1(), &r, Policy())
|
||||
||
|
||||
!detail::check_df(
|
||||
function,
|
||||
dist.degrees_of_freedom2(), &r, Policy())
|
||||
||
|
||||
!detail::check_non_centrality(
|
||||
function,
|
||||
dist.non_centrality(),
|
||||
&r,
|
||||
Policy()))
|
||||
return r;
|
||||
|
||||
if((x < 0) || !(boost::math::isfinite)(x))
|
||||
{
|
||||
return policies::raise_domain_error<RealType>(
|
||||
function, "Random Variable parameter was %1%, but must be > 0 !", x, Policy());
|
||||
}
|
||||
|
||||
RealType alpha = dist.degrees_of_freedom1() / 2;
|
||||
RealType beta = dist.degrees_of_freedom2() / 2;
|
||||
RealType y = x * alpha / beta;
|
||||
RealType c = y / (1 + y);
|
||||
RealType cp = 1 / (1 + y);
|
||||
//
|
||||
// To ensure accuracy, we pass both x and 1-x to the
|
||||
// non-central beta cdf routine, this ensures accuracy
|
||||
// even when we compute x to be ~ 1:
|
||||
//
|
||||
r = detail::non_central_beta_cdf(c, cp, alpha, beta,
|
||||
dist.non_centrality(), false, Policy());
|
||||
return r;
|
||||
} // cdf
|
||||
|
||||
template <class RealType, class Policy>
|
||||
RealType cdf(const complemented2_type<non_central_f_distribution<RealType, Policy>, RealType>& c)
|
||||
{ // Complemented Cumulative Distribution Function
|
||||
const char* function = "cdf(complement(const non_central_f_distribution<%1%>&, %1%))";
|
||||
RealType r;
|
||||
if(!detail::check_df(
|
||||
function,
|
||||
c.dist.degrees_of_freedom1(), &r, Policy())
|
||||
||
|
||||
!detail::check_df(
|
||||
function,
|
||||
c.dist.degrees_of_freedom2(), &r, Policy())
|
||||
||
|
||||
!detail::check_non_centrality(
|
||||
function,
|
||||
c.dist.non_centrality(),
|
||||
&r,
|
||||
Policy()))
|
||||
return r;
|
||||
|
||||
if((c.param < 0) || !(boost::math::isfinite)(c.param))
|
||||
{
|
||||
return policies::raise_domain_error<RealType>(
|
||||
function, "Random Variable parameter was %1%, but must be > 0 !", c.param, Policy());
|
||||
}
|
||||
|
||||
RealType alpha = c.dist.degrees_of_freedom1() / 2;
|
||||
RealType beta = c.dist.degrees_of_freedom2() / 2;
|
||||
RealType y = c.param * alpha / beta;
|
||||
RealType x = y / (1 + y);
|
||||
RealType cx = 1 / (1 + y);
|
||||
//
|
||||
// To ensure accuracy, we pass both x and 1-x to the
|
||||
// non-central beta cdf routine, this ensures accuracy
|
||||
// even when we compute x to be ~ 1:
|
||||
//
|
||||
r = detail::non_central_beta_cdf(x, cx, alpha, beta,
|
||||
c.dist.non_centrality(), true, Policy());
|
||||
return r;
|
||||
} // ccdf
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType quantile(const non_central_f_distribution<RealType, Policy>& dist, const RealType& p)
|
||||
{ // Quantile (or Percent Point) function.
|
||||
RealType alpha = dist.degrees_of_freedom1() / 2;
|
||||
RealType beta = dist.degrees_of_freedom2() / 2;
|
||||
RealType x = quantile(boost::math::non_central_beta_distribution<RealType, Policy>(alpha, beta, dist.non_centrality()), p);
|
||||
if(x == 1)
|
||||
return policies::raise_overflow_error<RealType>(
|
||||
"quantile(const non_central_f_distribution<%1%>&, %1%)",
|
||||
"Result of non central F quantile is too large to represent.",
|
||||
Policy());
|
||||
return (x / (1 - x)) * (dist.degrees_of_freedom2() / dist.degrees_of_freedom1());
|
||||
} // quantile
|
||||
|
||||
template <class RealType, class Policy>
|
||||
inline RealType quantile(const complemented2_type<non_central_f_distribution<RealType, Policy>, RealType>& c)
|
||||
{ // Quantile (or Percent Point) function.
|
||||
RealType alpha = c.dist.degrees_of_freedom1() / 2;
|
||||
RealType beta = c.dist.degrees_of_freedom2() / 2;
|
||||
RealType x = quantile(complement(boost::math::non_central_beta_distribution<RealType, Policy>(alpha, beta, c.dist.non_centrality()), c.param));
|
||||
if(x == 1)
|
||||
return policies::raise_overflow_error<RealType>(
|
||||
"quantile(complement(const non_central_f_distribution<%1%>&, %1%))",
|
||||
"Result of non central F quantile is too large to represent.",
|
||||
Policy());
|
||||
return (x / (1 - x)) * (c.dist.degrees_of_freedom2() / c.dist.degrees_of_freedom1());
|
||||
} // quantile complement.
|
||||
|
||||
} // 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_MATH_SPECIAL_NON_CENTRAL_F_HPP
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2005-2013 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)
|
||||
==============================================================================*/
|
||||
#if !defined(FUSION_CONVERT_20061213_2207)
|
||||
#define FUSION_CONVERT_20061213_2207
|
||||
|
||||
#include <boost/fusion/support/config.hpp>
|
||||
#include <boost/fusion/container/deque/detail/convert_impl.hpp>
|
||||
#include <boost/fusion/container/deque/deque.hpp>
|
||||
|
||||
#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// C++03 (non-variadic) implementation
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#include <boost/fusion/container/deque/detail/cpp03/build_deque.hpp>
|
||||
|
||||
#else
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// C++11 variadic implementation
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#include <boost/fusion/container/deque/detail/build_deque.hpp>
|
||||
|
||||
namespace boost { namespace fusion
|
||||
{
|
||||
namespace result_of
|
||||
{
|
||||
template <typename Sequence>
|
||||
struct as_deque :
|
||||
detail::build_deque<
|
||||
typename result_of::begin<Sequence>::type
|
||||
, typename result_of::end<Sequence>::type
|
||||
>
|
||||
{
|
||||
};
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::as_deque<Sequence>::type
|
||||
as_deque(Sequence& seq)
|
||||
{
|
||||
typedef result_of::as_deque<Sequence> gen;
|
||||
return gen::call(fusion::begin(seq), fusion::end(seq));
|
||||
}
|
||||
|
||||
template <typename Sequence>
|
||||
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
|
||||
inline typename result_of::as_deque<Sequence const>::type
|
||||
as_deque(Sequence const& seq)
|
||||
{
|
||||
typedef result_of::as_deque<Sequence const> gen;
|
||||
return gen::call(fusion::begin(seq), fusion::end(seq));
|
||||
}
|
||||
}}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,51 @@
|
||||
subroutine extractmessage144(decoded,msgreceived,nhashflag,recent_calls,nrecent)
|
||||
use iso_c_binding, only: c_loc,c_size_t
|
||||
use packjt
|
||||
use hashing
|
||||
|
||||
character*22 msgreceived
|
||||
character*12 call1,call2
|
||||
character*12 recent_calls(nrecent)
|
||||
integer*1 decoded(80)
|
||||
integer*1, target:: i1Dec8BitBytes(10)
|
||||
integer*1 i1hashdec
|
||||
integer*4 i4Dec6BitWords(12)
|
||||
|
||||
! Collapse 80 decoded bits to 10 bytes. Bytes 1-9 are the message, byte 10 is the hash
|
||||
do ibyte=1,10
|
||||
itmp=0
|
||||
do ibit=1,8
|
||||
itmp=ishft(itmp,1)+iand(1,decoded((ibyte-1)*8+ibit))
|
||||
enddo
|
||||
i1Dec8BitBytes(ibyte)=itmp
|
||||
enddo
|
||||
|
||||
! Calculate the hash using the first 9 bytes.
|
||||
ihashdec=nhash(c_loc(i1Dec8BitBytes),int(9,c_size_t),146)
|
||||
ihashdec=2*iand(ihashdec,255)
|
||||
|
||||
! Compare calculated hash with received byte 10 - if they agree, keep the message.
|
||||
i1hashdec=ihashdec
|
||||
if( i1hashdec .eq. i1Dec8BitBytes(10) ) then
|
||||
! Good hash --- unpack 72-bit message
|
||||
do ibyte=1,12
|
||||
itmp=0
|
||||
do ibit=1,6
|
||||
itmp=ishft(itmp,1)+iand(1,decoded((ibyte-1)*6+ibit))
|
||||
enddo
|
||||
i4Dec6BitWords(ibyte)=itmp
|
||||
enddo
|
||||
call unpackmsg144(i4Dec6BitWords,msgreceived,call1,call2)
|
||||
nhashflag=1
|
||||
if( call1(1:2) .ne. 'CQ' .and. call1(1:2) .ne. ' ' ) then
|
||||
call update_recent_calls(call1,recent_calls,nrecent)
|
||||
endif
|
||||
if( call2(1:2) .ne. ' ' ) then
|
||||
call update_recent_calls(call2,recent_calls,nrecent)
|
||||
endif
|
||||
else
|
||||
msgreceived=' '
|
||||
nhashflag=-1
|
||||
endif
|
||||
return
|
||||
end subroutine extractmessage144
|
||||
@@ -0,0 +1,64 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// boost variant/detail/forced_return.hpp header file
|
||||
// See http://www.boost.org for updates, documentation, and revision history.
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Copyright (c) 2003 Eric Friedman
|
||||
// Copyright (c) 2015-2016 Antony Polukhin
|
||||
//
|
||||
// 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_VARIANT_DETAIL_FORCED_RETURN_HPP
|
||||
#define BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/variant/detail/generic_result_type.hpp>
|
||||
#include <boost/assert.hpp>
|
||||
#include <cstdlib> // std::abort
|
||||
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
# pragma warning( push )
|
||||
# pragma warning( disable : 4702 ) // unreachable code
|
||||
#endif
|
||||
|
||||
namespace boost { namespace detail { namespace variant {
|
||||
|
||||
BOOST_NORETURN inline void forced_return_no_return() { // fixes `must return a value` warnings
|
||||
using namespace std;
|
||||
abort(); // some implementations have no std::abort
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// (detail) function template forced_return
|
||||
//
|
||||
// Logical error to permit invocation at runtime, but (artificially) satisfies
|
||||
// compile-time requirement of returning a result value.
|
||||
//
|
||||
template <typename T>
|
||||
BOOST_NORETURN inline
|
||||
BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T)
|
||||
forced_return()
|
||||
{
|
||||
// logical error: should never be here! (see above)
|
||||
BOOST_ASSERT(false);
|
||||
|
||||
forced_return_no_return();
|
||||
|
||||
#ifdef BOOST_NO_NORETURN
|
||||
BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) (*dummy)() = 0;
|
||||
return dummy();
|
||||
#endif
|
||||
}
|
||||
|
||||
}}} // namespace boost::detail::variant
|
||||
|
||||
|
||||
#ifdef BOOST_MSVC
|
||||
# pragma warning( pop )
|
||||
#endif
|
||||
|
||||
#endif // BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP
|
||||
@@ -0,0 +1,534 @@
|
||||
# /* Copyright (C) 2001
|
||||
# * Housemarque Oy
|
||||
# * http://www.housemarque.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)
|
||||
# */
|
||||
#
|
||||
# /* Revised by Paul Mensonides (2002) */
|
||||
#
|
||||
# /* See http://www.boost.org for most recent version. */
|
||||
#
|
||||
# ifndef BOOST_PREPROCESSOR_REPETITION_DETAIL_EDG_FOR_HPP
|
||||
# define BOOST_PREPROCESSOR_REPETITION_DETAIL_EDG_FOR_HPP
|
||||
#
|
||||
# include <boost/preprocessor/control/if.hpp>
|
||||
# include <boost/preprocessor/tuple/eat.hpp>
|
||||
#
|
||||
# define BOOST_PP_FOR_1(s, p, o, m) BOOST_PP_FOR_1_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_2(s, p, o, m) BOOST_PP_FOR_2_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_3(s, p, o, m) BOOST_PP_FOR_3_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_4(s, p, o, m) BOOST_PP_FOR_4_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_5(s, p, o, m) BOOST_PP_FOR_5_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_6(s, p, o, m) BOOST_PP_FOR_6_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_7(s, p, o, m) BOOST_PP_FOR_7_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_8(s, p, o, m) BOOST_PP_FOR_8_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_9(s, p, o, m) BOOST_PP_FOR_9_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_10(s, p, o, m) BOOST_PP_FOR_10_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_11(s, p, o, m) BOOST_PP_FOR_11_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_12(s, p, o, m) BOOST_PP_FOR_12_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_13(s, p, o, m) BOOST_PP_FOR_13_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_14(s, p, o, m) BOOST_PP_FOR_14_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_15(s, p, o, m) BOOST_PP_FOR_15_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_16(s, p, o, m) BOOST_PP_FOR_16_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_17(s, p, o, m) BOOST_PP_FOR_17_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_18(s, p, o, m) BOOST_PP_FOR_18_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_19(s, p, o, m) BOOST_PP_FOR_19_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_20(s, p, o, m) BOOST_PP_FOR_20_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_21(s, p, o, m) BOOST_PP_FOR_21_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_22(s, p, o, m) BOOST_PP_FOR_22_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_23(s, p, o, m) BOOST_PP_FOR_23_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_24(s, p, o, m) BOOST_PP_FOR_24_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_25(s, p, o, m) BOOST_PP_FOR_25_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_26(s, p, o, m) BOOST_PP_FOR_26_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_27(s, p, o, m) BOOST_PP_FOR_27_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_28(s, p, o, m) BOOST_PP_FOR_28_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_29(s, p, o, m) BOOST_PP_FOR_29_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_30(s, p, o, m) BOOST_PP_FOR_30_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_31(s, p, o, m) BOOST_PP_FOR_31_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_32(s, p, o, m) BOOST_PP_FOR_32_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_33(s, p, o, m) BOOST_PP_FOR_33_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_34(s, p, o, m) BOOST_PP_FOR_34_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_35(s, p, o, m) BOOST_PP_FOR_35_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_36(s, p, o, m) BOOST_PP_FOR_36_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_37(s, p, o, m) BOOST_PP_FOR_37_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_38(s, p, o, m) BOOST_PP_FOR_38_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_39(s, p, o, m) BOOST_PP_FOR_39_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_40(s, p, o, m) BOOST_PP_FOR_40_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_41(s, p, o, m) BOOST_PP_FOR_41_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_42(s, p, o, m) BOOST_PP_FOR_42_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_43(s, p, o, m) BOOST_PP_FOR_43_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_44(s, p, o, m) BOOST_PP_FOR_44_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_45(s, p, o, m) BOOST_PP_FOR_45_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_46(s, p, o, m) BOOST_PP_FOR_46_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_47(s, p, o, m) BOOST_PP_FOR_47_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_48(s, p, o, m) BOOST_PP_FOR_48_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_49(s, p, o, m) BOOST_PP_FOR_49_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_50(s, p, o, m) BOOST_PP_FOR_50_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_51(s, p, o, m) BOOST_PP_FOR_51_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_52(s, p, o, m) BOOST_PP_FOR_52_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_53(s, p, o, m) BOOST_PP_FOR_53_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_54(s, p, o, m) BOOST_PP_FOR_54_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_55(s, p, o, m) BOOST_PP_FOR_55_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_56(s, p, o, m) BOOST_PP_FOR_56_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_57(s, p, o, m) BOOST_PP_FOR_57_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_58(s, p, o, m) BOOST_PP_FOR_58_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_59(s, p, o, m) BOOST_PP_FOR_59_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_60(s, p, o, m) BOOST_PP_FOR_60_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_61(s, p, o, m) BOOST_PP_FOR_61_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_62(s, p, o, m) BOOST_PP_FOR_62_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_63(s, p, o, m) BOOST_PP_FOR_63_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_64(s, p, o, m) BOOST_PP_FOR_64_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_65(s, p, o, m) BOOST_PP_FOR_65_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_66(s, p, o, m) BOOST_PP_FOR_66_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_67(s, p, o, m) BOOST_PP_FOR_67_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_68(s, p, o, m) BOOST_PP_FOR_68_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_69(s, p, o, m) BOOST_PP_FOR_69_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_70(s, p, o, m) BOOST_PP_FOR_70_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_71(s, p, o, m) BOOST_PP_FOR_71_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_72(s, p, o, m) BOOST_PP_FOR_72_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_73(s, p, o, m) BOOST_PP_FOR_73_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_74(s, p, o, m) BOOST_PP_FOR_74_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_75(s, p, o, m) BOOST_PP_FOR_75_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_76(s, p, o, m) BOOST_PP_FOR_76_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_77(s, p, o, m) BOOST_PP_FOR_77_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_78(s, p, o, m) BOOST_PP_FOR_78_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_79(s, p, o, m) BOOST_PP_FOR_79_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_80(s, p, o, m) BOOST_PP_FOR_80_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_81(s, p, o, m) BOOST_PP_FOR_81_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_82(s, p, o, m) BOOST_PP_FOR_82_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_83(s, p, o, m) BOOST_PP_FOR_83_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_84(s, p, o, m) BOOST_PP_FOR_84_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_85(s, p, o, m) BOOST_PP_FOR_85_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_86(s, p, o, m) BOOST_PP_FOR_86_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_87(s, p, o, m) BOOST_PP_FOR_87_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_88(s, p, o, m) BOOST_PP_FOR_88_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_89(s, p, o, m) BOOST_PP_FOR_89_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_90(s, p, o, m) BOOST_PP_FOR_90_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_91(s, p, o, m) BOOST_PP_FOR_91_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_92(s, p, o, m) BOOST_PP_FOR_92_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_93(s, p, o, m) BOOST_PP_FOR_93_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_94(s, p, o, m) BOOST_PP_FOR_94_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_95(s, p, o, m) BOOST_PP_FOR_95_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_96(s, p, o, m) BOOST_PP_FOR_96_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_97(s, p, o, m) BOOST_PP_FOR_97_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_98(s, p, o, m) BOOST_PP_FOR_98_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_99(s, p, o, m) BOOST_PP_FOR_99_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_100(s, p, o, m) BOOST_PP_FOR_100_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_101(s, p, o, m) BOOST_PP_FOR_101_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_102(s, p, o, m) BOOST_PP_FOR_102_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_103(s, p, o, m) BOOST_PP_FOR_103_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_104(s, p, o, m) BOOST_PP_FOR_104_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_105(s, p, o, m) BOOST_PP_FOR_105_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_106(s, p, o, m) BOOST_PP_FOR_106_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_107(s, p, o, m) BOOST_PP_FOR_107_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_108(s, p, o, m) BOOST_PP_FOR_108_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_109(s, p, o, m) BOOST_PP_FOR_109_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_110(s, p, o, m) BOOST_PP_FOR_110_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_111(s, p, o, m) BOOST_PP_FOR_111_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_112(s, p, o, m) BOOST_PP_FOR_112_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_113(s, p, o, m) BOOST_PP_FOR_113_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_114(s, p, o, m) BOOST_PP_FOR_114_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_115(s, p, o, m) BOOST_PP_FOR_115_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_116(s, p, o, m) BOOST_PP_FOR_116_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_117(s, p, o, m) BOOST_PP_FOR_117_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_118(s, p, o, m) BOOST_PP_FOR_118_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_119(s, p, o, m) BOOST_PP_FOR_119_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_120(s, p, o, m) BOOST_PP_FOR_120_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_121(s, p, o, m) BOOST_PP_FOR_121_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_122(s, p, o, m) BOOST_PP_FOR_122_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_123(s, p, o, m) BOOST_PP_FOR_123_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_124(s, p, o, m) BOOST_PP_FOR_124_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_125(s, p, o, m) BOOST_PP_FOR_125_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_126(s, p, o, m) BOOST_PP_FOR_126_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_127(s, p, o, m) BOOST_PP_FOR_127_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_128(s, p, o, m) BOOST_PP_FOR_128_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_129(s, p, o, m) BOOST_PP_FOR_129_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_130(s, p, o, m) BOOST_PP_FOR_130_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_131(s, p, o, m) BOOST_PP_FOR_131_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_132(s, p, o, m) BOOST_PP_FOR_132_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_133(s, p, o, m) BOOST_PP_FOR_133_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_134(s, p, o, m) BOOST_PP_FOR_134_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_135(s, p, o, m) BOOST_PP_FOR_135_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_136(s, p, o, m) BOOST_PP_FOR_136_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_137(s, p, o, m) BOOST_PP_FOR_137_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_138(s, p, o, m) BOOST_PP_FOR_138_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_139(s, p, o, m) BOOST_PP_FOR_139_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_140(s, p, o, m) BOOST_PP_FOR_140_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_141(s, p, o, m) BOOST_PP_FOR_141_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_142(s, p, o, m) BOOST_PP_FOR_142_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_143(s, p, o, m) BOOST_PP_FOR_143_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_144(s, p, o, m) BOOST_PP_FOR_144_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_145(s, p, o, m) BOOST_PP_FOR_145_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_146(s, p, o, m) BOOST_PP_FOR_146_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_147(s, p, o, m) BOOST_PP_FOR_147_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_148(s, p, o, m) BOOST_PP_FOR_148_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_149(s, p, o, m) BOOST_PP_FOR_149_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_150(s, p, o, m) BOOST_PP_FOR_150_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_151(s, p, o, m) BOOST_PP_FOR_151_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_152(s, p, o, m) BOOST_PP_FOR_152_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_153(s, p, o, m) BOOST_PP_FOR_153_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_154(s, p, o, m) BOOST_PP_FOR_154_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_155(s, p, o, m) BOOST_PP_FOR_155_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_156(s, p, o, m) BOOST_PP_FOR_156_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_157(s, p, o, m) BOOST_PP_FOR_157_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_158(s, p, o, m) BOOST_PP_FOR_158_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_159(s, p, o, m) BOOST_PP_FOR_159_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_160(s, p, o, m) BOOST_PP_FOR_160_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_161(s, p, o, m) BOOST_PP_FOR_161_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_162(s, p, o, m) BOOST_PP_FOR_162_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_163(s, p, o, m) BOOST_PP_FOR_163_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_164(s, p, o, m) BOOST_PP_FOR_164_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_165(s, p, o, m) BOOST_PP_FOR_165_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_166(s, p, o, m) BOOST_PP_FOR_166_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_167(s, p, o, m) BOOST_PP_FOR_167_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_168(s, p, o, m) BOOST_PP_FOR_168_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_169(s, p, o, m) BOOST_PP_FOR_169_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_170(s, p, o, m) BOOST_PP_FOR_170_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_171(s, p, o, m) BOOST_PP_FOR_171_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_172(s, p, o, m) BOOST_PP_FOR_172_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_173(s, p, o, m) BOOST_PP_FOR_173_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_174(s, p, o, m) BOOST_PP_FOR_174_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_175(s, p, o, m) BOOST_PP_FOR_175_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_176(s, p, o, m) BOOST_PP_FOR_176_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_177(s, p, o, m) BOOST_PP_FOR_177_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_178(s, p, o, m) BOOST_PP_FOR_178_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_179(s, p, o, m) BOOST_PP_FOR_179_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_180(s, p, o, m) BOOST_PP_FOR_180_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_181(s, p, o, m) BOOST_PP_FOR_181_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_182(s, p, o, m) BOOST_PP_FOR_182_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_183(s, p, o, m) BOOST_PP_FOR_183_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_184(s, p, o, m) BOOST_PP_FOR_184_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_185(s, p, o, m) BOOST_PP_FOR_185_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_186(s, p, o, m) BOOST_PP_FOR_186_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_187(s, p, o, m) BOOST_PP_FOR_187_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_188(s, p, o, m) BOOST_PP_FOR_188_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_189(s, p, o, m) BOOST_PP_FOR_189_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_190(s, p, o, m) BOOST_PP_FOR_190_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_191(s, p, o, m) BOOST_PP_FOR_191_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_192(s, p, o, m) BOOST_PP_FOR_192_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_193(s, p, o, m) BOOST_PP_FOR_193_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_194(s, p, o, m) BOOST_PP_FOR_194_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_195(s, p, o, m) BOOST_PP_FOR_195_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_196(s, p, o, m) BOOST_PP_FOR_196_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_197(s, p, o, m) BOOST_PP_FOR_197_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_198(s, p, o, m) BOOST_PP_FOR_198_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_199(s, p, o, m) BOOST_PP_FOR_199_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_200(s, p, o, m) BOOST_PP_FOR_200_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_201(s, p, o, m) BOOST_PP_FOR_201_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_202(s, p, o, m) BOOST_PP_FOR_202_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_203(s, p, o, m) BOOST_PP_FOR_203_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_204(s, p, o, m) BOOST_PP_FOR_204_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_205(s, p, o, m) BOOST_PP_FOR_205_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_206(s, p, o, m) BOOST_PP_FOR_206_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_207(s, p, o, m) BOOST_PP_FOR_207_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_208(s, p, o, m) BOOST_PP_FOR_208_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_209(s, p, o, m) BOOST_PP_FOR_209_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_210(s, p, o, m) BOOST_PP_FOR_210_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_211(s, p, o, m) BOOST_PP_FOR_211_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_212(s, p, o, m) BOOST_PP_FOR_212_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_213(s, p, o, m) BOOST_PP_FOR_213_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_214(s, p, o, m) BOOST_PP_FOR_214_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_215(s, p, o, m) BOOST_PP_FOR_215_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_216(s, p, o, m) BOOST_PP_FOR_216_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_217(s, p, o, m) BOOST_PP_FOR_217_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_218(s, p, o, m) BOOST_PP_FOR_218_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_219(s, p, o, m) BOOST_PP_FOR_219_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_220(s, p, o, m) BOOST_PP_FOR_220_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_221(s, p, o, m) BOOST_PP_FOR_221_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_222(s, p, o, m) BOOST_PP_FOR_222_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_223(s, p, o, m) BOOST_PP_FOR_223_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_224(s, p, o, m) BOOST_PP_FOR_224_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_225(s, p, o, m) BOOST_PP_FOR_225_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_226(s, p, o, m) BOOST_PP_FOR_226_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_227(s, p, o, m) BOOST_PP_FOR_227_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_228(s, p, o, m) BOOST_PP_FOR_228_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_229(s, p, o, m) BOOST_PP_FOR_229_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_230(s, p, o, m) BOOST_PP_FOR_230_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_231(s, p, o, m) BOOST_PP_FOR_231_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_232(s, p, o, m) BOOST_PP_FOR_232_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_233(s, p, o, m) BOOST_PP_FOR_233_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_234(s, p, o, m) BOOST_PP_FOR_234_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_235(s, p, o, m) BOOST_PP_FOR_235_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_236(s, p, o, m) BOOST_PP_FOR_236_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_237(s, p, o, m) BOOST_PP_FOR_237_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_238(s, p, o, m) BOOST_PP_FOR_238_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_239(s, p, o, m) BOOST_PP_FOR_239_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_240(s, p, o, m) BOOST_PP_FOR_240_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_241(s, p, o, m) BOOST_PP_FOR_241_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_242(s, p, o, m) BOOST_PP_FOR_242_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_243(s, p, o, m) BOOST_PP_FOR_243_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_244(s, p, o, m) BOOST_PP_FOR_244_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_245(s, p, o, m) BOOST_PP_FOR_245_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_246(s, p, o, m) BOOST_PP_FOR_246_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_247(s, p, o, m) BOOST_PP_FOR_247_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_248(s, p, o, m) BOOST_PP_FOR_248_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_249(s, p, o, m) BOOST_PP_FOR_249_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_250(s, p, o, m) BOOST_PP_FOR_250_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_251(s, p, o, m) BOOST_PP_FOR_251_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_252(s, p, o, m) BOOST_PP_FOR_252_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_253(s, p, o, m) BOOST_PP_FOR_253_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_254(s, p, o, m) BOOST_PP_FOR_254_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_255(s, p, o, m) BOOST_PP_FOR_255_I(s, p, o, m)
|
||||
# define BOOST_PP_FOR_256(s, p, o, m) BOOST_PP_FOR_256_I(s, p, o, m)
|
||||
#
|
||||
# define BOOST_PP_FOR_1_I(s, p, o, m) BOOST_PP_IF(p(2, s), m, BOOST_PP_TUPLE_EAT_2)(2, s) BOOST_PP_IF(p(2, s), BOOST_PP_FOR_2, BOOST_PP_TUPLE_EAT_4)(o(2, s), p, o, m)
|
||||
# define BOOST_PP_FOR_2_I(s, p, o, m) BOOST_PP_IF(p(3, s), m, BOOST_PP_TUPLE_EAT_2)(3, s) BOOST_PP_IF(p(3, s), BOOST_PP_FOR_3, BOOST_PP_TUPLE_EAT_4)(o(3, s), p, o, m)
|
||||
# define BOOST_PP_FOR_3_I(s, p, o, m) BOOST_PP_IF(p(4, s), m, BOOST_PP_TUPLE_EAT_2)(4, s) BOOST_PP_IF(p(4, s), BOOST_PP_FOR_4, BOOST_PP_TUPLE_EAT_4)(o(4, s), p, o, m)
|
||||
# define BOOST_PP_FOR_4_I(s, p, o, m) BOOST_PP_IF(p(5, s), m, BOOST_PP_TUPLE_EAT_2)(5, s) BOOST_PP_IF(p(5, s), BOOST_PP_FOR_5, BOOST_PP_TUPLE_EAT_4)(o(5, s), p, o, m)
|
||||
# define BOOST_PP_FOR_5_I(s, p, o, m) BOOST_PP_IF(p(6, s), m, BOOST_PP_TUPLE_EAT_2)(6, s) BOOST_PP_IF(p(6, s), BOOST_PP_FOR_6, BOOST_PP_TUPLE_EAT_4)(o(6, s), p, o, m)
|
||||
# define BOOST_PP_FOR_6_I(s, p, o, m) BOOST_PP_IF(p(7, s), m, BOOST_PP_TUPLE_EAT_2)(7, s) BOOST_PP_IF(p(7, s), BOOST_PP_FOR_7, BOOST_PP_TUPLE_EAT_4)(o(7, s), p, o, m)
|
||||
# define BOOST_PP_FOR_7_I(s, p, o, m) BOOST_PP_IF(p(8, s), m, BOOST_PP_TUPLE_EAT_2)(8, s) BOOST_PP_IF(p(8, s), BOOST_PP_FOR_8, BOOST_PP_TUPLE_EAT_4)(o(8, s), p, o, m)
|
||||
# define BOOST_PP_FOR_8_I(s, p, o, m) BOOST_PP_IF(p(9, s), m, BOOST_PP_TUPLE_EAT_2)(9, s) BOOST_PP_IF(p(9, s), BOOST_PP_FOR_9, BOOST_PP_TUPLE_EAT_4)(o(9, s), p, o, m)
|
||||
# define BOOST_PP_FOR_9_I(s, p, o, m) BOOST_PP_IF(p(10, s), m, BOOST_PP_TUPLE_EAT_2)(10, s) BOOST_PP_IF(p(10, s), BOOST_PP_FOR_10, BOOST_PP_TUPLE_EAT_4)(o(10, s), p, o, m)
|
||||
# define BOOST_PP_FOR_10_I(s, p, o, m) BOOST_PP_IF(p(11, s), m, BOOST_PP_TUPLE_EAT_2)(11, s) BOOST_PP_IF(p(11, s), BOOST_PP_FOR_11, BOOST_PP_TUPLE_EAT_4)(o(11, s), p, o, m)
|
||||
# define BOOST_PP_FOR_11_I(s, p, o, m) BOOST_PP_IF(p(12, s), m, BOOST_PP_TUPLE_EAT_2)(12, s) BOOST_PP_IF(p(12, s), BOOST_PP_FOR_12, BOOST_PP_TUPLE_EAT_4)(o(12, s), p, o, m)
|
||||
# define BOOST_PP_FOR_12_I(s, p, o, m) BOOST_PP_IF(p(13, s), m, BOOST_PP_TUPLE_EAT_2)(13, s) BOOST_PP_IF(p(13, s), BOOST_PP_FOR_13, BOOST_PP_TUPLE_EAT_4)(o(13, s), p, o, m)
|
||||
# define BOOST_PP_FOR_13_I(s, p, o, m) BOOST_PP_IF(p(14, s), m, BOOST_PP_TUPLE_EAT_2)(14, s) BOOST_PP_IF(p(14, s), BOOST_PP_FOR_14, BOOST_PP_TUPLE_EAT_4)(o(14, s), p, o, m)
|
||||
# define BOOST_PP_FOR_14_I(s, p, o, m) BOOST_PP_IF(p(15, s), m, BOOST_PP_TUPLE_EAT_2)(15, s) BOOST_PP_IF(p(15, s), BOOST_PP_FOR_15, BOOST_PP_TUPLE_EAT_4)(o(15, s), p, o, m)
|
||||
# define BOOST_PP_FOR_15_I(s, p, o, m) BOOST_PP_IF(p(16, s), m, BOOST_PP_TUPLE_EAT_2)(16, s) BOOST_PP_IF(p(16, s), BOOST_PP_FOR_16, BOOST_PP_TUPLE_EAT_4)(o(16, s), p, o, m)
|
||||
# define BOOST_PP_FOR_16_I(s, p, o, m) BOOST_PP_IF(p(17, s), m, BOOST_PP_TUPLE_EAT_2)(17, s) BOOST_PP_IF(p(17, s), BOOST_PP_FOR_17, BOOST_PP_TUPLE_EAT_4)(o(17, s), p, o, m)
|
||||
# define BOOST_PP_FOR_17_I(s, p, o, m) BOOST_PP_IF(p(18, s), m, BOOST_PP_TUPLE_EAT_2)(18, s) BOOST_PP_IF(p(18, s), BOOST_PP_FOR_18, BOOST_PP_TUPLE_EAT_4)(o(18, s), p, o, m)
|
||||
# define BOOST_PP_FOR_18_I(s, p, o, m) BOOST_PP_IF(p(19, s), m, BOOST_PP_TUPLE_EAT_2)(19, s) BOOST_PP_IF(p(19, s), BOOST_PP_FOR_19, BOOST_PP_TUPLE_EAT_4)(o(19, s), p, o, m)
|
||||
# define BOOST_PP_FOR_19_I(s, p, o, m) BOOST_PP_IF(p(20, s), m, BOOST_PP_TUPLE_EAT_2)(20, s) BOOST_PP_IF(p(20, s), BOOST_PP_FOR_20, BOOST_PP_TUPLE_EAT_4)(o(20, s), p, o, m)
|
||||
# define BOOST_PP_FOR_20_I(s, p, o, m) BOOST_PP_IF(p(21, s), m, BOOST_PP_TUPLE_EAT_2)(21, s) BOOST_PP_IF(p(21, s), BOOST_PP_FOR_21, BOOST_PP_TUPLE_EAT_4)(o(21, s), p, o, m)
|
||||
# define BOOST_PP_FOR_21_I(s, p, o, m) BOOST_PP_IF(p(22, s), m, BOOST_PP_TUPLE_EAT_2)(22, s) BOOST_PP_IF(p(22, s), BOOST_PP_FOR_22, BOOST_PP_TUPLE_EAT_4)(o(22, s), p, o, m)
|
||||
# define BOOST_PP_FOR_22_I(s, p, o, m) BOOST_PP_IF(p(23, s), m, BOOST_PP_TUPLE_EAT_2)(23, s) BOOST_PP_IF(p(23, s), BOOST_PP_FOR_23, BOOST_PP_TUPLE_EAT_4)(o(23, s), p, o, m)
|
||||
# define BOOST_PP_FOR_23_I(s, p, o, m) BOOST_PP_IF(p(24, s), m, BOOST_PP_TUPLE_EAT_2)(24, s) BOOST_PP_IF(p(24, s), BOOST_PP_FOR_24, BOOST_PP_TUPLE_EAT_4)(o(24, s), p, o, m)
|
||||
# define BOOST_PP_FOR_24_I(s, p, o, m) BOOST_PP_IF(p(25, s), m, BOOST_PP_TUPLE_EAT_2)(25, s) BOOST_PP_IF(p(25, s), BOOST_PP_FOR_25, BOOST_PP_TUPLE_EAT_4)(o(25, s), p, o, m)
|
||||
# define BOOST_PP_FOR_25_I(s, p, o, m) BOOST_PP_IF(p(26, s), m, BOOST_PP_TUPLE_EAT_2)(26, s) BOOST_PP_IF(p(26, s), BOOST_PP_FOR_26, BOOST_PP_TUPLE_EAT_4)(o(26, s), p, o, m)
|
||||
# define BOOST_PP_FOR_26_I(s, p, o, m) BOOST_PP_IF(p(27, s), m, BOOST_PP_TUPLE_EAT_2)(27, s) BOOST_PP_IF(p(27, s), BOOST_PP_FOR_27, BOOST_PP_TUPLE_EAT_4)(o(27, s), p, o, m)
|
||||
# define BOOST_PP_FOR_27_I(s, p, o, m) BOOST_PP_IF(p(28, s), m, BOOST_PP_TUPLE_EAT_2)(28, s) BOOST_PP_IF(p(28, s), BOOST_PP_FOR_28, BOOST_PP_TUPLE_EAT_4)(o(28, s), p, o, m)
|
||||
# define BOOST_PP_FOR_28_I(s, p, o, m) BOOST_PP_IF(p(29, s), m, BOOST_PP_TUPLE_EAT_2)(29, s) BOOST_PP_IF(p(29, s), BOOST_PP_FOR_29, BOOST_PP_TUPLE_EAT_4)(o(29, s), p, o, m)
|
||||
# define BOOST_PP_FOR_29_I(s, p, o, m) BOOST_PP_IF(p(30, s), m, BOOST_PP_TUPLE_EAT_2)(30, s) BOOST_PP_IF(p(30, s), BOOST_PP_FOR_30, BOOST_PP_TUPLE_EAT_4)(o(30, s), p, o, m)
|
||||
# define BOOST_PP_FOR_30_I(s, p, o, m) BOOST_PP_IF(p(31, s), m, BOOST_PP_TUPLE_EAT_2)(31, s) BOOST_PP_IF(p(31, s), BOOST_PP_FOR_31, BOOST_PP_TUPLE_EAT_4)(o(31, s), p, o, m)
|
||||
# define BOOST_PP_FOR_31_I(s, p, o, m) BOOST_PP_IF(p(32, s), m, BOOST_PP_TUPLE_EAT_2)(32, s) BOOST_PP_IF(p(32, s), BOOST_PP_FOR_32, BOOST_PP_TUPLE_EAT_4)(o(32, s), p, o, m)
|
||||
# define BOOST_PP_FOR_32_I(s, p, o, m) BOOST_PP_IF(p(33, s), m, BOOST_PP_TUPLE_EAT_2)(33, s) BOOST_PP_IF(p(33, s), BOOST_PP_FOR_33, BOOST_PP_TUPLE_EAT_4)(o(33, s), p, o, m)
|
||||
# define BOOST_PP_FOR_33_I(s, p, o, m) BOOST_PP_IF(p(34, s), m, BOOST_PP_TUPLE_EAT_2)(34, s) BOOST_PP_IF(p(34, s), BOOST_PP_FOR_34, BOOST_PP_TUPLE_EAT_4)(o(34, s), p, o, m)
|
||||
# define BOOST_PP_FOR_34_I(s, p, o, m) BOOST_PP_IF(p(35, s), m, BOOST_PP_TUPLE_EAT_2)(35, s) BOOST_PP_IF(p(35, s), BOOST_PP_FOR_35, BOOST_PP_TUPLE_EAT_4)(o(35, s), p, o, m)
|
||||
# define BOOST_PP_FOR_35_I(s, p, o, m) BOOST_PP_IF(p(36, s), m, BOOST_PP_TUPLE_EAT_2)(36, s) BOOST_PP_IF(p(36, s), BOOST_PP_FOR_36, BOOST_PP_TUPLE_EAT_4)(o(36, s), p, o, m)
|
||||
# define BOOST_PP_FOR_36_I(s, p, o, m) BOOST_PP_IF(p(37, s), m, BOOST_PP_TUPLE_EAT_2)(37, s) BOOST_PP_IF(p(37, s), BOOST_PP_FOR_37, BOOST_PP_TUPLE_EAT_4)(o(37, s), p, o, m)
|
||||
# define BOOST_PP_FOR_37_I(s, p, o, m) BOOST_PP_IF(p(38, s), m, BOOST_PP_TUPLE_EAT_2)(38, s) BOOST_PP_IF(p(38, s), BOOST_PP_FOR_38, BOOST_PP_TUPLE_EAT_4)(o(38, s), p, o, m)
|
||||
# define BOOST_PP_FOR_38_I(s, p, o, m) BOOST_PP_IF(p(39, s), m, BOOST_PP_TUPLE_EAT_2)(39, s) BOOST_PP_IF(p(39, s), BOOST_PP_FOR_39, BOOST_PP_TUPLE_EAT_4)(o(39, s), p, o, m)
|
||||
# define BOOST_PP_FOR_39_I(s, p, o, m) BOOST_PP_IF(p(40, s), m, BOOST_PP_TUPLE_EAT_2)(40, s) BOOST_PP_IF(p(40, s), BOOST_PP_FOR_40, BOOST_PP_TUPLE_EAT_4)(o(40, s), p, o, m)
|
||||
# define BOOST_PP_FOR_40_I(s, p, o, m) BOOST_PP_IF(p(41, s), m, BOOST_PP_TUPLE_EAT_2)(41, s) BOOST_PP_IF(p(41, s), BOOST_PP_FOR_41, BOOST_PP_TUPLE_EAT_4)(o(41, s), p, o, m)
|
||||
# define BOOST_PP_FOR_41_I(s, p, o, m) BOOST_PP_IF(p(42, s), m, BOOST_PP_TUPLE_EAT_2)(42, s) BOOST_PP_IF(p(42, s), BOOST_PP_FOR_42, BOOST_PP_TUPLE_EAT_4)(o(42, s), p, o, m)
|
||||
# define BOOST_PP_FOR_42_I(s, p, o, m) BOOST_PP_IF(p(43, s), m, BOOST_PP_TUPLE_EAT_2)(43, s) BOOST_PP_IF(p(43, s), BOOST_PP_FOR_43, BOOST_PP_TUPLE_EAT_4)(o(43, s), p, o, m)
|
||||
# define BOOST_PP_FOR_43_I(s, p, o, m) BOOST_PP_IF(p(44, s), m, BOOST_PP_TUPLE_EAT_2)(44, s) BOOST_PP_IF(p(44, s), BOOST_PP_FOR_44, BOOST_PP_TUPLE_EAT_4)(o(44, s), p, o, m)
|
||||
# define BOOST_PP_FOR_44_I(s, p, o, m) BOOST_PP_IF(p(45, s), m, BOOST_PP_TUPLE_EAT_2)(45, s) BOOST_PP_IF(p(45, s), BOOST_PP_FOR_45, BOOST_PP_TUPLE_EAT_4)(o(45, s), p, o, m)
|
||||
# define BOOST_PP_FOR_45_I(s, p, o, m) BOOST_PP_IF(p(46, s), m, BOOST_PP_TUPLE_EAT_2)(46, s) BOOST_PP_IF(p(46, s), BOOST_PP_FOR_46, BOOST_PP_TUPLE_EAT_4)(o(46, s), p, o, m)
|
||||
# define BOOST_PP_FOR_46_I(s, p, o, m) BOOST_PP_IF(p(47, s), m, BOOST_PP_TUPLE_EAT_2)(47, s) BOOST_PP_IF(p(47, s), BOOST_PP_FOR_47, BOOST_PP_TUPLE_EAT_4)(o(47, s), p, o, m)
|
||||
# define BOOST_PP_FOR_47_I(s, p, o, m) BOOST_PP_IF(p(48, s), m, BOOST_PP_TUPLE_EAT_2)(48, s) BOOST_PP_IF(p(48, s), BOOST_PP_FOR_48, BOOST_PP_TUPLE_EAT_4)(o(48, s), p, o, m)
|
||||
# define BOOST_PP_FOR_48_I(s, p, o, m) BOOST_PP_IF(p(49, s), m, BOOST_PP_TUPLE_EAT_2)(49, s) BOOST_PP_IF(p(49, s), BOOST_PP_FOR_49, BOOST_PP_TUPLE_EAT_4)(o(49, s), p, o, m)
|
||||
# define BOOST_PP_FOR_49_I(s, p, o, m) BOOST_PP_IF(p(50, s), m, BOOST_PP_TUPLE_EAT_2)(50, s) BOOST_PP_IF(p(50, s), BOOST_PP_FOR_50, BOOST_PP_TUPLE_EAT_4)(o(50, s), p, o, m)
|
||||
# define BOOST_PP_FOR_50_I(s, p, o, m) BOOST_PP_IF(p(51, s), m, BOOST_PP_TUPLE_EAT_2)(51, s) BOOST_PP_IF(p(51, s), BOOST_PP_FOR_51, BOOST_PP_TUPLE_EAT_4)(o(51, s), p, o, m)
|
||||
# define BOOST_PP_FOR_51_I(s, p, o, m) BOOST_PP_IF(p(52, s), m, BOOST_PP_TUPLE_EAT_2)(52, s) BOOST_PP_IF(p(52, s), BOOST_PP_FOR_52, BOOST_PP_TUPLE_EAT_4)(o(52, s), p, o, m)
|
||||
# define BOOST_PP_FOR_52_I(s, p, o, m) BOOST_PP_IF(p(53, s), m, BOOST_PP_TUPLE_EAT_2)(53, s) BOOST_PP_IF(p(53, s), BOOST_PP_FOR_53, BOOST_PP_TUPLE_EAT_4)(o(53, s), p, o, m)
|
||||
# define BOOST_PP_FOR_53_I(s, p, o, m) BOOST_PP_IF(p(54, s), m, BOOST_PP_TUPLE_EAT_2)(54, s) BOOST_PP_IF(p(54, s), BOOST_PP_FOR_54, BOOST_PP_TUPLE_EAT_4)(o(54, s), p, o, m)
|
||||
# define BOOST_PP_FOR_54_I(s, p, o, m) BOOST_PP_IF(p(55, s), m, BOOST_PP_TUPLE_EAT_2)(55, s) BOOST_PP_IF(p(55, s), BOOST_PP_FOR_55, BOOST_PP_TUPLE_EAT_4)(o(55, s), p, o, m)
|
||||
# define BOOST_PP_FOR_55_I(s, p, o, m) BOOST_PP_IF(p(56, s), m, BOOST_PP_TUPLE_EAT_2)(56, s) BOOST_PP_IF(p(56, s), BOOST_PP_FOR_56, BOOST_PP_TUPLE_EAT_4)(o(56, s), p, o, m)
|
||||
# define BOOST_PP_FOR_56_I(s, p, o, m) BOOST_PP_IF(p(57, s), m, BOOST_PP_TUPLE_EAT_2)(57, s) BOOST_PP_IF(p(57, s), BOOST_PP_FOR_57, BOOST_PP_TUPLE_EAT_4)(o(57, s), p, o, m)
|
||||
# define BOOST_PP_FOR_57_I(s, p, o, m) BOOST_PP_IF(p(58, s), m, BOOST_PP_TUPLE_EAT_2)(58, s) BOOST_PP_IF(p(58, s), BOOST_PP_FOR_58, BOOST_PP_TUPLE_EAT_4)(o(58, s), p, o, m)
|
||||
# define BOOST_PP_FOR_58_I(s, p, o, m) BOOST_PP_IF(p(59, s), m, BOOST_PP_TUPLE_EAT_2)(59, s) BOOST_PP_IF(p(59, s), BOOST_PP_FOR_59, BOOST_PP_TUPLE_EAT_4)(o(59, s), p, o, m)
|
||||
# define BOOST_PP_FOR_59_I(s, p, o, m) BOOST_PP_IF(p(60, s), m, BOOST_PP_TUPLE_EAT_2)(60, s) BOOST_PP_IF(p(60, s), BOOST_PP_FOR_60, BOOST_PP_TUPLE_EAT_4)(o(60, s), p, o, m)
|
||||
# define BOOST_PP_FOR_60_I(s, p, o, m) BOOST_PP_IF(p(61, s), m, BOOST_PP_TUPLE_EAT_2)(61, s) BOOST_PP_IF(p(61, s), BOOST_PP_FOR_61, BOOST_PP_TUPLE_EAT_4)(o(61, s), p, o, m)
|
||||
# define BOOST_PP_FOR_61_I(s, p, o, m) BOOST_PP_IF(p(62, s), m, BOOST_PP_TUPLE_EAT_2)(62, s) BOOST_PP_IF(p(62, s), BOOST_PP_FOR_62, BOOST_PP_TUPLE_EAT_4)(o(62, s), p, o, m)
|
||||
# define BOOST_PP_FOR_62_I(s, p, o, m) BOOST_PP_IF(p(63, s), m, BOOST_PP_TUPLE_EAT_2)(63, s) BOOST_PP_IF(p(63, s), BOOST_PP_FOR_63, BOOST_PP_TUPLE_EAT_4)(o(63, s), p, o, m)
|
||||
# define BOOST_PP_FOR_63_I(s, p, o, m) BOOST_PP_IF(p(64, s), m, BOOST_PP_TUPLE_EAT_2)(64, s) BOOST_PP_IF(p(64, s), BOOST_PP_FOR_64, BOOST_PP_TUPLE_EAT_4)(o(64, s), p, o, m)
|
||||
# define BOOST_PP_FOR_64_I(s, p, o, m) BOOST_PP_IF(p(65, s), m, BOOST_PP_TUPLE_EAT_2)(65, s) BOOST_PP_IF(p(65, s), BOOST_PP_FOR_65, BOOST_PP_TUPLE_EAT_4)(o(65, s), p, o, m)
|
||||
# define BOOST_PP_FOR_65_I(s, p, o, m) BOOST_PP_IF(p(66, s), m, BOOST_PP_TUPLE_EAT_2)(66, s) BOOST_PP_IF(p(66, s), BOOST_PP_FOR_66, BOOST_PP_TUPLE_EAT_4)(o(66, s), p, o, m)
|
||||
# define BOOST_PP_FOR_66_I(s, p, o, m) BOOST_PP_IF(p(67, s), m, BOOST_PP_TUPLE_EAT_2)(67, s) BOOST_PP_IF(p(67, s), BOOST_PP_FOR_67, BOOST_PP_TUPLE_EAT_4)(o(67, s), p, o, m)
|
||||
# define BOOST_PP_FOR_67_I(s, p, o, m) BOOST_PP_IF(p(68, s), m, BOOST_PP_TUPLE_EAT_2)(68, s) BOOST_PP_IF(p(68, s), BOOST_PP_FOR_68, BOOST_PP_TUPLE_EAT_4)(o(68, s), p, o, m)
|
||||
# define BOOST_PP_FOR_68_I(s, p, o, m) BOOST_PP_IF(p(69, s), m, BOOST_PP_TUPLE_EAT_2)(69, s) BOOST_PP_IF(p(69, s), BOOST_PP_FOR_69, BOOST_PP_TUPLE_EAT_4)(o(69, s), p, o, m)
|
||||
# define BOOST_PP_FOR_69_I(s, p, o, m) BOOST_PP_IF(p(70, s), m, BOOST_PP_TUPLE_EAT_2)(70, s) BOOST_PP_IF(p(70, s), BOOST_PP_FOR_70, BOOST_PP_TUPLE_EAT_4)(o(70, s), p, o, m)
|
||||
# define BOOST_PP_FOR_70_I(s, p, o, m) BOOST_PP_IF(p(71, s), m, BOOST_PP_TUPLE_EAT_2)(71, s) BOOST_PP_IF(p(71, s), BOOST_PP_FOR_71, BOOST_PP_TUPLE_EAT_4)(o(71, s), p, o, m)
|
||||
# define BOOST_PP_FOR_71_I(s, p, o, m) BOOST_PP_IF(p(72, s), m, BOOST_PP_TUPLE_EAT_2)(72, s) BOOST_PP_IF(p(72, s), BOOST_PP_FOR_72, BOOST_PP_TUPLE_EAT_4)(o(72, s), p, o, m)
|
||||
# define BOOST_PP_FOR_72_I(s, p, o, m) BOOST_PP_IF(p(73, s), m, BOOST_PP_TUPLE_EAT_2)(73, s) BOOST_PP_IF(p(73, s), BOOST_PP_FOR_73, BOOST_PP_TUPLE_EAT_4)(o(73, s), p, o, m)
|
||||
# define BOOST_PP_FOR_73_I(s, p, o, m) BOOST_PP_IF(p(74, s), m, BOOST_PP_TUPLE_EAT_2)(74, s) BOOST_PP_IF(p(74, s), BOOST_PP_FOR_74, BOOST_PP_TUPLE_EAT_4)(o(74, s), p, o, m)
|
||||
# define BOOST_PP_FOR_74_I(s, p, o, m) BOOST_PP_IF(p(75, s), m, BOOST_PP_TUPLE_EAT_2)(75, s) BOOST_PP_IF(p(75, s), BOOST_PP_FOR_75, BOOST_PP_TUPLE_EAT_4)(o(75, s), p, o, m)
|
||||
# define BOOST_PP_FOR_75_I(s, p, o, m) BOOST_PP_IF(p(76, s), m, BOOST_PP_TUPLE_EAT_2)(76, s) BOOST_PP_IF(p(76, s), BOOST_PP_FOR_76, BOOST_PP_TUPLE_EAT_4)(o(76, s), p, o, m)
|
||||
# define BOOST_PP_FOR_76_I(s, p, o, m) BOOST_PP_IF(p(77, s), m, BOOST_PP_TUPLE_EAT_2)(77, s) BOOST_PP_IF(p(77, s), BOOST_PP_FOR_77, BOOST_PP_TUPLE_EAT_4)(o(77, s), p, o, m)
|
||||
# define BOOST_PP_FOR_77_I(s, p, o, m) BOOST_PP_IF(p(78, s), m, BOOST_PP_TUPLE_EAT_2)(78, s) BOOST_PP_IF(p(78, s), BOOST_PP_FOR_78, BOOST_PP_TUPLE_EAT_4)(o(78, s), p, o, m)
|
||||
# define BOOST_PP_FOR_78_I(s, p, o, m) BOOST_PP_IF(p(79, s), m, BOOST_PP_TUPLE_EAT_2)(79, s) BOOST_PP_IF(p(79, s), BOOST_PP_FOR_79, BOOST_PP_TUPLE_EAT_4)(o(79, s), p, o, m)
|
||||
# define BOOST_PP_FOR_79_I(s, p, o, m) BOOST_PP_IF(p(80, s), m, BOOST_PP_TUPLE_EAT_2)(80, s) BOOST_PP_IF(p(80, s), BOOST_PP_FOR_80, BOOST_PP_TUPLE_EAT_4)(o(80, s), p, o, m)
|
||||
# define BOOST_PP_FOR_80_I(s, p, o, m) BOOST_PP_IF(p(81, s), m, BOOST_PP_TUPLE_EAT_2)(81, s) BOOST_PP_IF(p(81, s), BOOST_PP_FOR_81, BOOST_PP_TUPLE_EAT_4)(o(81, s), p, o, m)
|
||||
# define BOOST_PP_FOR_81_I(s, p, o, m) BOOST_PP_IF(p(82, s), m, BOOST_PP_TUPLE_EAT_2)(82, s) BOOST_PP_IF(p(82, s), BOOST_PP_FOR_82, BOOST_PP_TUPLE_EAT_4)(o(82, s), p, o, m)
|
||||
# define BOOST_PP_FOR_82_I(s, p, o, m) BOOST_PP_IF(p(83, s), m, BOOST_PP_TUPLE_EAT_2)(83, s) BOOST_PP_IF(p(83, s), BOOST_PP_FOR_83, BOOST_PP_TUPLE_EAT_4)(o(83, s), p, o, m)
|
||||
# define BOOST_PP_FOR_83_I(s, p, o, m) BOOST_PP_IF(p(84, s), m, BOOST_PP_TUPLE_EAT_2)(84, s) BOOST_PP_IF(p(84, s), BOOST_PP_FOR_84, BOOST_PP_TUPLE_EAT_4)(o(84, s), p, o, m)
|
||||
# define BOOST_PP_FOR_84_I(s, p, o, m) BOOST_PP_IF(p(85, s), m, BOOST_PP_TUPLE_EAT_2)(85, s) BOOST_PP_IF(p(85, s), BOOST_PP_FOR_85, BOOST_PP_TUPLE_EAT_4)(o(85, s), p, o, m)
|
||||
# define BOOST_PP_FOR_85_I(s, p, o, m) BOOST_PP_IF(p(86, s), m, BOOST_PP_TUPLE_EAT_2)(86, s) BOOST_PP_IF(p(86, s), BOOST_PP_FOR_86, BOOST_PP_TUPLE_EAT_4)(o(86, s), p, o, m)
|
||||
# define BOOST_PP_FOR_86_I(s, p, o, m) BOOST_PP_IF(p(87, s), m, BOOST_PP_TUPLE_EAT_2)(87, s) BOOST_PP_IF(p(87, s), BOOST_PP_FOR_87, BOOST_PP_TUPLE_EAT_4)(o(87, s), p, o, m)
|
||||
# define BOOST_PP_FOR_87_I(s, p, o, m) BOOST_PP_IF(p(88, s), m, BOOST_PP_TUPLE_EAT_2)(88, s) BOOST_PP_IF(p(88, s), BOOST_PP_FOR_88, BOOST_PP_TUPLE_EAT_4)(o(88, s), p, o, m)
|
||||
# define BOOST_PP_FOR_88_I(s, p, o, m) BOOST_PP_IF(p(89, s), m, BOOST_PP_TUPLE_EAT_2)(89, s) BOOST_PP_IF(p(89, s), BOOST_PP_FOR_89, BOOST_PP_TUPLE_EAT_4)(o(89, s), p, o, m)
|
||||
# define BOOST_PP_FOR_89_I(s, p, o, m) BOOST_PP_IF(p(90, s), m, BOOST_PP_TUPLE_EAT_2)(90, s) BOOST_PP_IF(p(90, s), BOOST_PP_FOR_90, BOOST_PP_TUPLE_EAT_4)(o(90, s), p, o, m)
|
||||
# define BOOST_PP_FOR_90_I(s, p, o, m) BOOST_PP_IF(p(91, s), m, BOOST_PP_TUPLE_EAT_2)(91, s) BOOST_PP_IF(p(91, s), BOOST_PP_FOR_91, BOOST_PP_TUPLE_EAT_4)(o(91, s), p, o, m)
|
||||
# define BOOST_PP_FOR_91_I(s, p, o, m) BOOST_PP_IF(p(92, s), m, BOOST_PP_TUPLE_EAT_2)(92, s) BOOST_PP_IF(p(92, s), BOOST_PP_FOR_92, BOOST_PP_TUPLE_EAT_4)(o(92, s), p, o, m)
|
||||
# define BOOST_PP_FOR_92_I(s, p, o, m) BOOST_PP_IF(p(93, s), m, BOOST_PP_TUPLE_EAT_2)(93, s) BOOST_PP_IF(p(93, s), BOOST_PP_FOR_93, BOOST_PP_TUPLE_EAT_4)(o(93, s), p, o, m)
|
||||
# define BOOST_PP_FOR_93_I(s, p, o, m) BOOST_PP_IF(p(94, s), m, BOOST_PP_TUPLE_EAT_2)(94, s) BOOST_PP_IF(p(94, s), BOOST_PP_FOR_94, BOOST_PP_TUPLE_EAT_4)(o(94, s), p, o, m)
|
||||
# define BOOST_PP_FOR_94_I(s, p, o, m) BOOST_PP_IF(p(95, s), m, BOOST_PP_TUPLE_EAT_2)(95, s) BOOST_PP_IF(p(95, s), BOOST_PP_FOR_95, BOOST_PP_TUPLE_EAT_4)(o(95, s), p, o, m)
|
||||
# define BOOST_PP_FOR_95_I(s, p, o, m) BOOST_PP_IF(p(96, s), m, BOOST_PP_TUPLE_EAT_2)(96, s) BOOST_PP_IF(p(96, s), BOOST_PP_FOR_96, BOOST_PP_TUPLE_EAT_4)(o(96, s), p, o, m)
|
||||
# define BOOST_PP_FOR_96_I(s, p, o, m) BOOST_PP_IF(p(97, s), m, BOOST_PP_TUPLE_EAT_2)(97, s) BOOST_PP_IF(p(97, s), BOOST_PP_FOR_97, BOOST_PP_TUPLE_EAT_4)(o(97, s), p, o, m)
|
||||
# define BOOST_PP_FOR_97_I(s, p, o, m) BOOST_PP_IF(p(98, s), m, BOOST_PP_TUPLE_EAT_2)(98, s) BOOST_PP_IF(p(98, s), BOOST_PP_FOR_98, BOOST_PP_TUPLE_EAT_4)(o(98, s), p, o, m)
|
||||
# define BOOST_PP_FOR_98_I(s, p, o, m) BOOST_PP_IF(p(99, s), m, BOOST_PP_TUPLE_EAT_2)(99, s) BOOST_PP_IF(p(99, s), BOOST_PP_FOR_99, BOOST_PP_TUPLE_EAT_4)(o(99, s), p, o, m)
|
||||
# define BOOST_PP_FOR_99_I(s, p, o, m) BOOST_PP_IF(p(100, s), m, BOOST_PP_TUPLE_EAT_2)(100, s) BOOST_PP_IF(p(100, s), BOOST_PP_FOR_100, BOOST_PP_TUPLE_EAT_4)(o(100, s), p, o, m)
|
||||
# define BOOST_PP_FOR_100_I(s, p, o, m) BOOST_PP_IF(p(101, s), m, BOOST_PP_TUPLE_EAT_2)(101, s) BOOST_PP_IF(p(101, s), BOOST_PP_FOR_101, BOOST_PP_TUPLE_EAT_4)(o(101, s), p, o, m)
|
||||
# define BOOST_PP_FOR_101_I(s, p, o, m) BOOST_PP_IF(p(102, s), m, BOOST_PP_TUPLE_EAT_2)(102, s) BOOST_PP_IF(p(102, s), BOOST_PP_FOR_102, BOOST_PP_TUPLE_EAT_4)(o(102, s), p, o, m)
|
||||
# define BOOST_PP_FOR_102_I(s, p, o, m) BOOST_PP_IF(p(103, s), m, BOOST_PP_TUPLE_EAT_2)(103, s) BOOST_PP_IF(p(103, s), BOOST_PP_FOR_103, BOOST_PP_TUPLE_EAT_4)(o(103, s), p, o, m)
|
||||
# define BOOST_PP_FOR_103_I(s, p, o, m) BOOST_PP_IF(p(104, s), m, BOOST_PP_TUPLE_EAT_2)(104, s) BOOST_PP_IF(p(104, s), BOOST_PP_FOR_104, BOOST_PP_TUPLE_EAT_4)(o(104, s), p, o, m)
|
||||
# define BOOST_PP_FOR_104_I(s, p, o, m) BOOST_PP_IF(p(105, s), m, BOOST_PP_TUPLE_EAT_2)(105, s) BOOST_PP_IF(p(105, s), BOOST_PP_FOR_105, BOOST_PP_TUPLE_EAT_4)(o(105, s), p, o, m)
|
||||
# define BOOST_PP_FOR_105_I(s, p, o, m) BOOST_PP_IF(p(106, s), m, BOOST_PP_TUPLE_EAT_2)(106, s) BOOST_PP_IF(p(106, s), BOOST_PP_FOR_106, BOOST_PP_TUPLE_EAT_4)(o(106, s), p, o, m)
|
||||
# define BOOST_PP_FOR_106_I(s, p, o, m) BOOST_PP_IF(p(107, s), m, BOOST_PP_TUPLE_EAT_2)(107, s) BOOST_PP_IF(p(107, s), BOOST_PP_FOR_107, BOOST_PP_TUPLE_EAT_4)(o(107, s), p, o, m)
|
||||
# define BOOST_PP_FOR_107_I(s, p, o, m) BOOST_PP_IF(p(108, s), m, BOOST_PP_TUPLE_EAT_2)(108, s) BOOST_PP_IF(p(108, s), BOOST_PP_FOR_108, BOOST_PP_TUPLE_EAT_4)(o(108, s), p, o, m)
|
||||
# define BOOST_PP_FOR_108_I(s, p, o, m) BOOST_PP_IF(p(109, s), m, BOOST_PP_TUPLE_EAT_2)(109, s) BOOST_PP_IF(p(109, s), BOOST_PP_FOR_109, BOOST_PP_TUPLE_EAT_4)(o(109, s), p, o, m)
|
||||
# define BOOST_PP_FOR_109_I(s, p, o, m) BOOST_PP_IF(p(110, s), m, BOOST_PP_TUPLE_EAT_2)(110, s) BOOST_PP_IF(p(110, s), BOOST_PP_FOR_110, BOOST_PP_TUPLE_EAT_4)(o(110, s), p, o, m)
|
||||
# define BOOST_PP_FOR_110_I(s, p, o, m) BOOST_PP_IF(p(111, s), m, BOOST_PP_TUPLE_EAT_2)(111, s) BOOST_PP_IF(p(111, s), BOOST_PP_FOR_111, BOOST_PP_TUPLE_EAT_4)(o(111, s), p, o, m)
|
||||
# define BOOST_PP_FOR_111_I(s, p, o, m) BOOST_PP_IF(p(112, s), m, BOOST_PP_TUPLE_EAT_2)(112, s) BOOST_PP_IF(p(112, s), BOOST_PP_FOR_112, BOOST_PP_TUPLE_EAT_4)(o(112, s), p, o, m)
|
||||
# define BOOST_PP_FOR_112_I(s, p, o, m) BOOST_PP_IF(p(113, s), m, BOOST_PP_TUPLE_EAT_2)(113, s) BOOST_PP_IF(p(113, s), BOOST_PP_FOR_113, BOOST_PP_TUPLE_EAT_4)(o(113, s), p, o, m)
|
||||
# define BOOST_PP_FOR_113_I(s, p, o, m) BOOST_PP_IF(p(114, s), m, BOOST_PP_TUPLE_EAT_2)(114, s) BOOST_PP_IF(p(114, s), BOOST_PP_FOR_114, BOOST_PP_TUPLE_EAT_4)(o(114, s), p, o, m)
|
||||
# define BOOST_PP_FOR_114_I(s, p, o, m) BOOST_PP_IF(p(115, s), m, BOOST_PP_TUPLE_EAT_2)(115, s) BOOST_PP_IF(p(115, s), BOOST_PP_FOR_115, BOOST_PP_TUPLE_EAT_4)(o(115, s), p, o, m)
|
||||
# define BOOST_PP_FOR_115_I(s, p, o, m) BOOST_PP_IF(p(116, s), m, BOOST_PP_TUPLE_EAT_2)(116, s) BOOST_PP_IF(p(116, s), BOOST_PP_FOR_116, BOOST_PP_TUPLE_EAT_4)(o(116, s), p, o, m)
|
||||
# define BOOST_PP_FOR_116_I(s, p, o, m) BOOST_PP_IF(p(117, s), m, BOOST_PP_TUPLE_EAT_2)(117, s) BOOST_PP_IF(p(117, s), BOOST_PP_FOR_117, BOOST_PP_TUPLE_EAT_4)(o(117, s), p, o, m)
|
||||
# define BOOST_PP_FOR_117_I(s, p, o, m) BOOST_PP_IF(p(118, s), m, BOOST_PP_TUPLE_EAT_2)(118, s) BOOST_PP_IF(p(118, s), BOOST_PP_FOR_118, BOOST_PP_TUPLE_EAT_4)(o(118, s), p, o, m)
|
||||
# define BOOST_PP_FOR_118_I(s, p, o, m) BOOST_PP_IF(p(119, s), m, BOOST_PP_TUPLE_EAT_2)(119, s) BOOST_PP_IF(p(119, s), BOOST_PP_FOR_119, BOOST_PP_TUPLE_EAT_4)(o(119, s), p, o, m)
|
||||
# define BOOST_PP_FOR_119_I(s, p, o, m) BOOST_PP_IF(p(120, s), m, BOOST_PP_TUPLE_EAT_2)(120, s) BOOST_PP_IF(p(120, s), BOOST_PP_FOR_120, BOOST_PP_TUPLE_EAT_4)(o(120, s), p, o, m)
|
||||
# define BOOST_PP_FOR_120_I(s, p, o, m) BOOST_PP_IF(p(121, s), m, BOOST_PP_TUPLE_EAT_2)(121, s) BOOST_PP_IF(p(121, s), BOOST_PP_FOR_121, BOOST_PP_TUPLE_EAT_4)(o(121, s), p, o, m)
|
||||
# define BOOST_PP_FOR_121_I(s, p, o, m) BOOST_PP_IF(p(122, s), m, BOOST_PP_TUPLE_EAT_2)(122, s) BOOST_PP_IF(p(122, s), BOOST_PP_FOR_122, BOOST_PP_TUPLE_EAT_4)(o(122, s), p, o, m)
|
||||
# define BOOST_PP_FOR_122_I(s, p, o, m) BOOST_PP_IF(p(123, s), m, BOOST_PP_TUPLE_EAT_2)(123, s) BOOST_PP_IF(p(123, s), BOOST_PP_FOR_123, BOOST_PP_TUPLE_EAT_4)(o(123, s), p, o, m)
|
||||
# define BOOST_PP_FOR_123_I(s, p, o, m) BOOST_PP_IF(p(124, s), m, BOOST_PP_TUPLE_EAT_2)(124, s) BOOST_PP_IF(p(124, s), BOOST_PP_FOR_124, BOOST_PP_TUPLE_EAT_4)(o(124, s), p, o, m)
|
||||
# define BOOST_PP_FOR_124_I(s, p, o, m) BOOST_PP_IF(p(125, s), m, BOOST_PP_TUPLE_EAT_2)(125, s) BOOST_PP_IF(p(125, s), BOOST_PP_FOR_125, BOOST_PP_TUPLE_EAT_4)(o(125, s), p, o, m)
|
||||
# define BOOST_PP_FOR_125_I(s, p, o, m) BOOST_PP_IF(p(126, s), m, BOOST_PP_TUPLE_EAT_2)(126, s) BOOST_PP_IF(p(126, s), BOOST_PP_FOR_126, BOOST_PP_TUPLE_EAT_4)(o(126, s), p, o, m)
|
||||
# define BOOST_PP_FOR_126_I(s, p, o, m) BOOST_PP_IF(p(127, s), m, BOOST_PP_TUPLE_EAT_2)(127, s) BOOST_PP_IF(p(127, s), BOOST_PP_FOR_127, BOOST_PP_TUPLE_EAT_4)(o(127, s), p, o, m)
|
||||
# define BOOST_PP_FOR_127_I(s, p, o, m) BOOST_PP_IF(p(128, s), m, BOOST_PP_TUPLE_EAT_2)(128, s) BOOST_PP_IF(p(128, s), BOOST_PP_FOR_128, BOOST_PP_TUPLE_EAT_4)(o(128, s), p, o, m)
|
||||
# define BOOST_PP_FOR_128_I(s, p, o, m) BOOST_PP_IF(p(129, s), m, BOOST_PP_TUPLE_EAT_2)(129, s) BOOST_PP_IF(p(129, s), BOOST_PP_FOR_129, BOOST_PP_TUPLE_EAT_4)(o(129, s), p, o, m)
|
||||
# define BOOST_PP_FOR_129_I(s, p, o, m) BOOST_PP_IF(p(130, s), m, BOOST_PP_TUPLE_EAT_2)(130, s) BOOST_PP_IF(p(130, s), BOOST_PP_FOR_130, BOOST_PP_TUPLE_EAT_4)(o(130, s), p, o, m)
|
||||
# define BOOST_PP_FOR_130_I(s, p, o, m) BOOST_PP_IF(p(131, s), m, BOOST_PP_TUPLE_EAT_2)(131, s) BOOST_PP_IF(p(131, s), BOOST_PP_FOR_131, BOOST_PP_TUPLE_EAT_4)(o(131, s), p, o, m)
|
||||
# define BOOST_PP_FOR_131_I(s, p, o, m) BOOST_PP_IF(p(132, s), m, BOOST_PP_TUPLE_EAT_2)(132, s) BOOST_PP_IF(p(132, s), BOOST_PP_FOR_132, BOOST_PP_TUPLE_EAT_4)(o(132, s), p, o, m)
|
||||
# define BOOST_PP_FOR_132_I(s, p, o, m) BOOST_PP_IF(p(133, s), m, BOOST_PP_TUPLE_EAT_2)(133, s) BOOST_PP_IF(p(133, s), BOOST_PP_FOR_133, BOOST_PP_TUPLE_EAT_4)(o(133, s), p, o, m)
|
||||
# define BOOST_PP_FOR_133_I(s, p, o, m) BOOST_PP_IF(p(134, s), m, BOOST_PP_TUPLE_EAT_2)(134, s) BOOST_PP_IF(p(134, s), BOOST_PP_FOR_134, BOOST_PP_TUPLE_EAT_4)(o(134, s), p, o, m)
|
||||
# define BOOST_PP_FOR_134_I(s, p, o, m) BOOST_PP_IF(p(135, s), m, BOOST_PP_TUPLE_EAT_2)(135, s) BOOST_PP_IF(p(135, s), BOOST_PP_FOR_135, BOOST_PP_TUPLE_EAT_4)(o(135, s), p, o, m)
|
||||
# define BOOST_PP_FOR_135_I(s, p, o, m) BOOST_PP_IF(p(136, s), m, BOOST_PP_TUPLE_EAT_2)(136, s) BOOST_PP_IF(p(136, s), BOOST_PP_FOR_136, BOOST_PP_TUPLE_EAT_4)(o(136, s), p, o, m)
|
||||
# define BOOST_PP_FOR_136_I(s, p, o, m) BOOST_PP_IF(p(137, s), m, BOOST_PP_TUPLE_EAT_2)(137, s) BOOST_PP_IF(p(137, s), BOOST_PP_FOR_137, BOOST_PP_TUPLE_EAT_4)(o(137, s), p, o, m)
|
||||
# define BOOST_PP_FOR_137_I(s, p, o, m) BOOST_PP_IF(p(138, s), m, BOOST_PP_TUPLE_EAT_2)(138, s) BOOST_PP_IF(p(138, s), BOOST_PP_FOR_138, BOOST_PP_TUPLE_EAT_4)(o(138, s), p, o, m)
|
||||
# define BOOST_PP_FOR_138_I(s, p, o, m) BOOST_PP_IF(p(139, s), m, BOOST_PP_TUPLE_EAT_2)(139, s) BOOST_PP_IF(p(139, s), BOOST_PP_FOR_139, BOOST_PP_TUPLE_EAT_4)(o(139, s), p, o, m)
|
||||
# define BOOST_PP_FOR_139_I(s, p, o, m) BOOST_PP_IF(p(140, s), m, BOOST_PP_TUPLE_EAT_2)(140, s) BOOST_PP_IF(p(140, s), BOOST_PP_FOR_140, BOOST_PP_TUPLE_EAT_4)(o(140, s), p, o, m)
|
||||
# define BOOST_PP_FOR_140_I(s, p, o, m) BOOST_PP_IF(p(141, s), m, BOOST_PP_TUPLE_EAT_2)(141, s) BOOST_PP_IF(p(141, s), BOOST_PP_FOR_141, BOOST_PP_TUPLE_EAT_4)(o(141, s), p, o, m)
|
||||
# define BOOST_PP_FOR_141_I(s, p, o, m) BOOST_PP_IF(p(142, s), m, BOOST_PP_TUPLE_EAT_2)(142, s) BOOST_PP_IF(p(142, s), BOOST_PP_FOR_142, BOOST_PP_TUPLE_EAT_4)(o(142, s), p, o, m)
|
||||
# define BOOST_PP_FOR_142_I(s, p, o, m) BOOST_PP_IF(p(143, s), m, BOOST_PP_TUPLE_EAT_2)(143, s) BOOST_PP_IF(p(143, s), BOOST_PP_FOR_143, BOOST_PP_TUPLE_EAT_4)(o(143, s), p, o, m)
|
||||
# define BOOST_PP_FOR_143_I(s, p, o, m) BOOST_PP_IF(p(144, s), m, BOOST_PP_TUPLE_EAT_2)(144, s) BOOST_PP_IF(p(144, s), BOOST_PP_FOR_144, BOOST_PP_TUPLE_EAT_4)(o(144, s), p, o, m)
|
||||
# define BOOST_PP_FOR_144_I(s, p, o, m) BOOST_PP_IF(p(145, s), m, BOOST_PP_TUPLE_EAT_2)(145, s) BOOST_PP_IF(p(145, s), BOOST_PP_FOR_145, BOOST_PP_TUPLE_EAT_4)(o(145, s), p, o, m)
|
||||
# define BOOST_PP_FOR_145_I(s, p, o, m) BOOST_PP_IF(p(146, s), m, BOOST_PP_TUPLE_EAT_2)(146, s) BOOST_PP_IF(p(146, s), BOOST_PP_FOR_146, BOOST_PP_TUPLE_EAT_4)(o(146, s), p, o, m)
|
||||
# define BOOST_PP_FOR_146_I(s, p, o, m) BOOST_PP_IF(p(147, s), m, BOOST_PP_TUPLE_EAT_2)(147, s) BOOST_PP_IF(p(147, s), BOOST_PP_FOR_147, BOOST_PP_TUPLE_EAT_4)(o(147, s), p, o, m)
|
||||
# define BOOST_PP_FOR_147_I(s, p, o, m) BOOST_PP_IF(p(148, s), m, BOOST_PP_TUPLE_EAT_2)(148, s) BOOST_PP_IF(p(148, s), BOOST_PP_FOR_148, BOOST_PP_TUPLE_EAT_4)(o(148, s), p, o, m)
|
||||
# define BOOST_PP_FOR_148_I(s, p, o, m) BOOST_PP_IF(p(149, s), m, BOOST_PP_TUPLE_EAT_2)(149, s) BOOST_PP_IF(p(149, s), BOOST_PP_FOR_149, BOOST_PP_TUPLE_EAT_4)(o(149, s), p, o, m)
|
||||
# define BOOST_PP_FOR_149_I(s, p, o, m) BOOST_PP_IF(p(150, s), m, BOOST_PP_TUPLE_EAT_2)(150, s) BOOST_PP_IF(p(150, s), BOOST_PP_FOR_150, BOOST_PP_TUPLE_EAT_4)(o(150, s), p, o, m)
|
||||
# define BOOST_PP_FOR_150_I(s, p, o, m) BOOST_PP_IF(p(151, s), m, BOOST_PP_TUPLE_EAT_2)(151, s) BOOST_PP_IF(p(151, s), BOOST_PP_FOR_151, BOOST_PP_TUPLE_EAT_4)(o(151, s), p, o, m)
|
||||
# define BOOST_PP_FOR_151_I(s, p, o, m) BOOST_PP_IF(p(152, s), m, BOOST_PP_TUPLE_EAT_2)(152, s) BOOST_PP_IF(p(152, s), BOOST_PP_FOR_152, BOOST_PP_TUPLE_EAT_4)(o(152, s), p, o, m)
|
||||
# define BOOST_PP_FOR_152_I(s, p, o, m) BOOST_PP_IF(p(153, s), m, BOOST_PP_TUPLE_EAT_2)(153, s) BOOST_PP_IF(p(153, s), BOOST_PP_FOR_153, BOOST_PP_TUPLE_EAT_4)(o(153, s), p, o, m)
|
||||
# define BOOST_PP_FOR_153_I(s, p, o, m) BOOST_PP_IF(p(154, s), m, BOOST_PP_TUPLE_EAT_2)(154, s) BOOST_PP_IF(p(154, s), BOOST_PP_FOR_154, BOOST_PP_TUPLE_EAT_4)(o(154, s), p, o, m)
|
||||
# define BOOST_PP_FOR_154_I(s, p, o, m) BOOST_PP_IF(p(155, s), m, BOOST_PP_TUPLE_EAT_2)(155, s) BOOST_PP_IF(p(155, s), BOOST_PP_FOR_155, BOOST_PP_TUPLE_EAT_4)(o(155, s), p, o, m)
|
||||
# define BOOST_PP_FOR_155_I(s, p, o, m) BOOST_PP_IF(p(156, s), m, BOOST_PP_TUPLE_EAT_2)(156, s) BOOST_PP_IF(p(156, s), BOOST_PP_FOR_156, BOOST_PP_TUPLE_EAT_4)(o(156, s), p, o, m)
|
||||
# define BOOST_PP_FOR_156_I(s, p, o, m) BOOST_PP_IF(p(157, s), m, BOOST_PP_TUPLE_EAT_2)(157, s) BOOST_PP_IF(p(157, s), BOOST_PP_FOR_157, BOOST_PP_TUPLE_EAT_4)(o(157, s), p, o, m)
|
||||
# define BOOST_PP_FOR_157_I(s, p, o, m) BOOST_PP_IF(p(158, s), m, BOOST_PP_TUPLE_EAT_2)(158, s) BOOST_PP_IF(p(158, s), BOOST_PP_FOR_158, BOOST_PP_TUPLE_EAT_4)(o(158, s), p, o, m)
|
||||
# define BOOST_PP_FOR_158_I(s, p, o, m) BOOST_PP_IF(p(159, s), m, BOOST_PP_TUPLE_EAT_2)(159, s) BOOST_PP_IF(p(159, s), BOOST_PP_FOR_159, BOOST_PP_TUPLE_EAT_4)(o(159, s), p, o, m)
|
||||
# define BOOST_PP_FOR_159_I(s, p, o, m) BOOST_PP_IF(p(160, s), m, BOOST_PP_TUPLE_EAT_2)(160, s) BOOST_PP_IF(p(160, s), BOOST_PP_FOR_160, BOOST_PP_TUPLE_EAT_4)(o(160, s), p, o, m)
|
||||
# define BOOST_PP_FOR_160_I(s, p, o, m) BOOST_PP_IF(p(161, s), m, BOOST_PP_TUPLE_EAT_2)(161, s) BOOST_PP_IF(p(161, s), BOOST_PP_FOR_161, BOOST_PP_TUPLE_EAT_4)(o(161, s), p, o, m)
|
||||
# define BOOST_PP_FOR_161_I(s, p, o, m) BOOST_PP_IF(p(162, s), m, BOOST_PP_TUPLE_EAT_2)(162, s) BOOST_PP_IF(p(162, s), BOOST_PP_FOR_162, BOOST_PP_TUPLE_EAT_4)(o(162, s), p, o, m)
|
||||
# define BOOST_PP_FOR_162_I(s, p, o, m) BOOST_PP_IF(p(163, s), m, BOOST_PP_TUPLE_EAT_2)(163, s) BOOST_PP_IF(p(163, s), BOOST_PP_FOR_163, BOOST_PP_TUPLE_EAT_4)(o(163, s), p, o, m)
|
||||
# define BOOST_PP_FOR_163_I(s, p, o, m) BOOST_PP_IF(p(164, s), m, BOOST_PP_TUPLE_EAT_2)(164, s) BOOST_PP_IF(p(164, s), BOOST_PP_FOR_164, BOOST_PP_TUPLE_EAT_4)(o(164, s), p, o, m)
|
||||
# define BOOST_PP_FOR_164_I(s, p, o, m) BOOST_PP_IF(p(165, s), m, BOOST_PP_TUPLE_EAT_2)(165, s) BOOST_PP_IF(p(165, s), BOOST_PP_FOR_165, BOOST_PP_TUPLE_EAT_4)(o(165, s), p, o, m)
|
||||
# define BOOST_PP_FOR_165_I(s, p, o, m) BOOST_PP_IF(p(166, s), m, BOOST_PP_TUPLE_EAT_2)(166, s) BOOST_PP_IF(p(166, s), BOOST_PP_FOR_166, BOOST_PP_TUPLE_EAT_4)(o(166, s), p, o, m)
|
||||
# define BOOST_PP_FOR_166_I(s, p, o, m) BOOST_PP_IF(p(167, s), m, BOOST_PP_TUPLE_EAT_2)(167, s) BOOST_PP_IF(p(167, s), BOOST_PP_FOR_167, BOOST_PP_TUPLE_EAT_4)(o(167, s), p, o, m)
|
||||
# define BOOST_PP_FOR_167_I(s, p, o, m) BOOST_PP_IF(p(168, s), m, BOOST_PP_TUPLE_EAT_2)(168, s) BOOST_PP_IF(p(168, s), BOOST_PP_FOR_168, BOOST_PP_TUPLE_EAT_4)(o(168, s), p, o, m)
|
||||
# define BOOST_PP_FOR_168_I(s, p, o, m) BOOST_PP_IF(p(169, s), m, BOOST_PP_TUPLE_EAT_2)(169, s) BOOST_PP_IF(p(169, s), BOOST_PP_FOR_169, BOOST_PP_TUPLE_EAT_4)(o(169, s), p, o, m)
|
||||
# define BOOST_PP_FOR_169_I(s, p, o, m) BOOST_PP_IF(p(170, s), m, BOOST_PP_TUPLE_EAT_2)(170, s) BOOST_PP_IF(p(170, s), BOOST_PP_FOR_170, BOOST_PP_TUPLE_EAT_4)(o(170, s), p, o, m)
|
||||
# define BOOST_PP_FOR_170_I(s, p, o, m) BOOST_PP_IF(p(171, s), m, BOOST_PP_TUPLE_EAT_2)(171, s) BOOST_PP_IF(p(171, s), BOOST_PP_FOR_171, BOOST_PP_TUPLE_EAT_4)(o(171, s), p, o, m)
|
||||
# define BOOST_PP_FOR_171_I(s, p, o, m) BOOST_PP_IF(p(172, s), m, BOOST_PP_TUPLE_EAT_2)(172, s) BOOST_PP_IF(p(172, s), BOOST_PP_FOR_172, BOOST_PP_TUPLE_EAT_4)(o(172, s), p, o, m)
|
||||
# define BOOST_PP_FOR_172_I(s, p, o, m) BOOST_PP_IF(p(173, s), m, BOOST_PP_TUPLE_EAT_2)(173, s) BOOST_PP_IF(p(173, s), BOOST_PP_FOR_173, BOOST_PP_TUPLE_EAT_4)(o(173, s), p, o, m)
|
||||
# define BOOST_PP_FOR_173_I(s, p, o, m) BOOST_PP_IF(p(174, s), m, BOOST_PP_TUPLE_EAT_2)(174, s) BOOST_PP_IF(p(174, s), BOOST_PP_FOR_174, BOOST_PP_TUPLE_EAT_4)(o(174, s), p, o, m)
|
||||
# define BOOST_PP_FOR_174_I(s, p, o, m) BOOST_PP_IF(p(175, s), m, BOOST_PP_TUPLE_EAT_2)(175, s) BOOST_PP_IF(p(175, s), BOOST_PP_FOR_175, BOOST_PP_TUPLE_EAT_4)(o(175, s), p, o, m)
|
||||
# define BOOST_PP_FOR_175_I(s, p, o, m) BOOST_PP_IF(p(176, s), m, BOOST_PP_TUPLE_EAT_2)(176, s) BOOST_PP_IF(p(176, s), BOOST_PP_FOR_176, BOOST_PP_TUPLE_EAT_4)(o(176, s), p, o, m)
|
||||
# define BOOST_PP_FOR_176_I(s, p, o, m) BOOST_PP_IF(p(177, s), m, BOOST_PP_TUPLE_EAT_2)(177, s) BOOST_PP_IF(p(177, s), BOOST_PP_FOR_177, BOOST_PP_TUPLE_EAT_4)(o(177, s), p, o, m)
|
||||
# define BOOST_PP_FOR_177_I(s, p, o, m) BOOST_PP_IF(p(178, s), m, BOOST_PP_TUPLE_EAT_2)(178, s) BOOST_PP_IF(p(178, s), BOOST_PP_FOR_178, BOOST_PP_TUPLE_EAT_4)(o(178, s), p, o, m)
|
||||
# define BOOST_PP_FOR_178_I(s, p, o, m) BOOST_PP_IF(p(179, s), m, BOOST_PP_TUPLE_EAT_2)(179, s) BOOST_PP_IF(p(179, s), BOOST_PP_FOR_179, BOOST_PP_TUPLE_EAT_4)(o(179, s), p, o, m)
|
||||
# define BOOST_PP_FOR_179_I(s, p, o, m) BOOST_PP_IF(p(180, s), m, BOOST_PP_TUPLE_EAT_2)(180, s) BOOST_PP_IF(p(180, s), BOOST_PP_FOR_180, BOOST_PP_TUPLE_EAT_4)(o(180, s), p, o, m)
|
||||
# define BOOST_PP_FOR_180_I(s, p, o, m) BOOST_PP_IF(p(181, s), m, BOOST_PP_TUPLE_EAT_2)(181, s) BOOST_PP_IF(p(181, s), BOOST_PP_FOR_181, BOOST_PP_TUPLE_EAT_4)(o(181, s), p, o, m)
|
||||
# define BOOST_PP_FOR_181_I(s, p, o, m) BOOST_PP_IF(p(182, s), m, BOOST_PP_TUPLE_EAT_2)(182, s) BOOST_PP_IF(p(182, s), BOOST_PP_FOR_182, BOOST_PP_TUPLE_EAT_4)(o(182, s), p, o, m)
|
||||
# define BOOST_PP_FOR_182_I(s, p, o, m) BOOST_PP_IF(p(183, s), m, BOOST_PP_TUPLE_EAT_2)(183, s) BOOST_PP_IF(p(183, s), BOOST_PP_FOR_183, BOOST_PP_TUPLE_EAT_4)(o(183, s), p, o, m)
|
||||
# define BOOST_PP_FOR_183_I(s, p, o, m) BOOST_PP_IF(p(184, s), m, BOOST_PP_TUPLE_EAT_2)(184, s) BOOST_PP_IF(p(184, s), BOOST_PP_FOR_184, BOOST_PP_TUPLE_EAT_4)(o(184, s), p, o, m)
|
||||
# define BOOST_PP_FOR_184_I(s, p, o, m) BOOST_PP_IF(p(185, s), m, BOOST_PP_TUPLE_EAT_2)(185, s) BOOST_PP_IF(p(185, s), BOOST_PP_FOR_185, BOOST_PP_TUPLE_EAT_4)(o(185, s), p, o, m)
|
||||
# define BOOST_PP_FOR_185_I(s, p, o, m) BOOST_PP_IF(p(186, s), m, BOOST_PP_TUPLE_EAT_2)(186, s) BOOST_PP_IF(p(186, s), BOOST_PP_FOR_186, BOOST_PP_TUPLE_EAT_4)(o(186, s), p, o, m)
|
||||
# define BOOST_PP_FOR_186_I(s, p, o, m) BOOST_PP_IF(p(187, s), m, BOOST_PP_TUPLE_EAT_2)(187, s) BOOST_PP_IF(p(187, s), BOOST_PP_FOR_187, BOOST_PP_TUPLE_EAT_4)(o(187, s), p, o, m)
|
||||
# define BOOST_PP_FOR_187_I(s, p, o, m) BOOST_PP_IF(p(188, s), m, BOOST_PP_TUPLE_EAT_2)(188, s) BOOST_PP_IF(p(188, s), BOOST_PP_FOR_188, BOOST_PP_TUPLE_EAT_4)(o(188, s), p, o, m)
|
||||
# define BOOST_PP_FOR_188_I(s, p, o, m) BOOST_PP_IF(p(189, s), m, BOOST_PP_TUPLE_EAT_2)(189, s) BOOST_PP_IF(p(189, s), BOOST_PP_FOR_189, BOOST_PP_TUPLE_EAT_4)(o(189, s), p, o, m)
|
||||
# define BOOST_PP_FOR_189_I(s, p, o, m) BOOST_PP_IF(p(190, s), m, BOOST_PP_TUPLE_EAT_2)(190, s) BOOST_PP_IF(p(190, s), BOOST_PP_FOR_190, BOOST_PP_TUPLE_EAT_4)(o(190, s), p, o, m)
|
||||
# define BOOST_PP_FOR_190_I(s, p, o, m) BOOST_PP_IF(p(191, s), m, BOOST_PP_TUPLE_EAT_2)(191, s) BOOST_PP_IF(p(191, s), BOOST_PP_FOR_191, BOOST_PP_TUPLE_EAT_4)(o(191, s), p, o, m)
|
||||
# define BOOST_PP_FOR_191_I(s, p, o, m) BOOST_PP_IF(p(192, s), m, BOOST_PP_TUPLE_EAT_2)(192, s) BOOST_PP_IF(p(192, s), BOOST_PP_FOR_192, BOOST_PP_TUPLE_EAT_4)(o(192, s), p, o, m)
|
||||
# define BOOST_PP_FOR_192_I(s, p, o, m) BOOST_PP_IF(p(193, s), m, BOOST_PP_TUPLE_EAT_2)(193, s) BOOST_PP_IF(p(193, s), BOOST_PP_FOR_193, BOOST_PP_TUPLE_EAT_4)(o(193, s), p, o, m)
|
||||
# define BOOST_PP_FOR_193_I(s, p, o, m) BOOST_PP_IF(p(194, s), m, BOOST_PP_TUPLE_EAT_2)(194, s) BOOST_PP_IF(p(194, s), BOOST_PP_FOR_194, BOOST_PP_TUPLE_EAT_4)(o(194, s), p, o, m)
|
||||
# define BOOST_PP_FOR_194_I(s, p, o, m) BOOST_PP_IF(p(195, s), m, BOOST_PP_TUPLE_EAT_2)(195, s) BOOST_PP_IF(p(195, s), BOOST_PP_FOR_195, BOOST_PP_TUPLE_EAT_4)(o(195, s), p, o, m)
|
||||
# define BOOST_PP_FOR_195_I(s, p, o, m) BOOST_PP_IF(p(196, s), m, BOOST_PP_TUPLE_EAT_2)(196, s) BOOST_PP_IF(p(196, s), BOOST_PP_FOR_196, BOOST_PP_TUPLE_EAT_4)(o(196, s), p, o, m)
|
||||
# define BOOST_PP_FOR_196_I(s, p, o, m) BOOST_PP_IF(p(197, s), m, BOOST_PP_TUPLE_EAT_2)(197, s) BOOST_PP_IF(p(197, s), BOOST_PP_FOR_197, BOOST_PP_TUPLE_EAT_4)(o(197, s), p, o, m)
|
||||
# define BOOST_PP_FOR_197_I(s, p, o, m) BOOST_PP_IF(p(198, s), m, BOOST_PP_TUPLE_EAT_2)(198, s) BOOST_PP_IF(p(198, s), BOOST_PP_FOR_198, BOOST_PP_TUPLE_EAT_4)(o(198, s), p, o, m)
|
||||
# define BOOST_PP_FOR_198_I(s, p, o, m) BOOST_PP_IF(p(199, s), m, BOOST_PP_TUPLE_EAT_2)(199, s) BOOST_PP_IF(p(199, s), BOOST_PP_FOR_199, BOOST_PP_TUPLE_EAT_4)(o(199, s), p, o, m)
|
||||
# define BOOST_PP_FOR_199_I(s, p, o, m) BOOST_PP_IF(p(200, s), m, BOOST_PP_TUPLE_EAT_2)(200, s) BOOST_PP_IF(p(200, s), BOOST_PP_FOR_200, BOOST_PP_TUPLE_EAT_4)(o(200, s), p, o, m)
|
||||
# define BOOST_PP_FOR_200_I(s, p, o, m) BOOST_PP_IF(p(201, s), m, BOOST_PP_TUPLE_EAT_2)(201, s) BOOST_PP_IF(p(201, s), BOOST_PP_FOR_201, BOOST_PP_TUPLE_EAT_4)(o(201, s), p, o, m)
|
||||
# define BOOST_PP_FOR_201_I(s, p, o, m) BOOST_PP_IF(p(202, s), m, BOOST_PP_TUPLE_EAT_2)(202, s) BOOST_PP_IF(p(202, s), BOOST_PP_FOR_202, BOOST_PP_TUPLE_EAT_4)(o(202, s), p, o, m)
|
||||
# define BOOST_PP_FOR_202_I(s, p, o, m) BOOST_PP_IF(p(203, s), m, BOOST_PP_TUPLE_EAT_2)(203, s) BOOST_PP_IF(p(203, s), BOOST_PP_FOR_203, BOOST_PP_TUPLE_EAT_4)(o(203, s), p, o, m)
|
||||
# define BOOST_PP_FOR_203_I(s, p, o, m) BOOST_PP_IF(p(204, s), m, BOOST_PP_TUPLE_EAT_2)(204, s) BOOST_PP_IF(p(204, s), BOOST_PP_FOR_204, BOOST_PP_TUPLE_EAT_4)(o(204, s), p, o, m)
|
||||
# define BOOST_PP_FOR_204_I(s, p, o, m) BOOST_PP_IF(p(205, s), m, BOOST_PP_TUPLE_EAT_2)(205, s) BOOST_PP_IF(p(205, s), BOOST_PP_FOR_205, BOOST_PP_TUPLE_EAT_4)(o(205, s), p, o, m)
|
||||
# define BOOST_PP_FOR_205_I(s, p, o, m) BOOST_PP_IF(p(206, s), m, BOOST_PP_TUPLE_EAT_2)(206, s) BOOST_PP_IF(p(206, s), BOOST_PP_FOR_206, BOOST_PP_TUPLE_EAT_4)(o(206, s), p, o, m)
|
||||
# define BOOST_PP_FOR_206_I(s, p, o, m) BOOST_PP_IF(p(207, s), m, BOOST_PP_TUPLE_EAT_2)(207, s) BOOST_PP_IF(p(207, s), BOOST_PP_FOR_207, BOOST_PP_TUPLE_EAT_4)(o(207, s), p, o, m)
|
||||
# define BOOST_PP_FOR_207_I(s, p, o, m) BOOST_PP_IF(p(208, s), m, BOOST_PP_TUPLE_EAT_2)(208, s) BOOST_PP_IF(p(208, s), BOOST_PP_FOR_208, BOOST_PP_TUPLE_EAT_4)(o(208, s), p, o, m)
|
||||
# define BOOST_PP_FOR_208_I(s, p, o, m) BOOST_PP_IF(p(209, s), m, BOOST_PP_TUPLE_EAT_2)(209, s) BOOST_PP_IF(p(209, s), BOOST_PP_FOR_209, BOOST_PP_TUPLE_EAT_4)(o(209, s), p, o, m)
|
||||
# define BOOST_PP_FOR_209_I(s, p, o, m) BOOST_PP_IF(p(210, s), m, BOOST_PP_TUPLE_EAT_2)(210, s) BOOST_PP_IF(p(210, s), BOOST_PP_FOR_210, BOOST_PP_TUPLE_EAT_4)(o(210, s), p, o, m)
|
||||
# define BOOST_PP_FOR_210_I(s, p, o, m) BOOST_PP_IF(p(211, s), m, BOOST_PP_TUPLE_EAT_2)(211, s) BOOST_PP_IF(p(211, s), BOOST_PP_FOR_211, BOOST_PP_TUPLE_EAT_4)(o(211, s), p, o, m)
|
||||
# define BOOST_PP_FOR_211_I(s, p, o, m) BOOST_PP_IF(p(212, s), m, BOOST_PP_TUPLE_EAT_2)(212, s) BOOST_PP_IF(p(212, s), BOOST_PP_FOR_212, BOOST_PP_TUPLE_EAT_4)(o(212, s), p, o, m)
|
||||
# define BOOST_PP_FOR_212_I(s, p, o, m) BOOST_PP_IF(p(213, s), m, BOOST_PP_TUPLE_EAT_2)(213, s) BOOST_PP_IF(p(213, s), BOOST_PP_FOR_213, BOOST_PP_TUPLE_EAT_4)(o(213, s), p, o, m)
|
||||
# define BOOST_PP_FOR_213_I(s, p, o, m) BOOST_PP_IF(p(214, s), m, BOOST_PP_TUPLE_EAT_2)(214, s) BOOST_PP_IF(p(214, s), BOOST_PP_FOR_214, BOOST_PP_TUPLE_EAT_4)(o(214, s), p, o, m)
|
||||
# define BOOST_PP_FOR_214_I(s, p, o, m) BOOST_PP_IF(p(215, s), m, BOOST_PP_TUPLE_EAT_2)(215, s) BOOST_PP_IF(p(215, s), BOOST_PP_FOR_215, BOOST_PP_TUPLE_EAT_4)(o(215, s), p, o, m)
|
||||
# define BOOST_PP_FOR_215_I(s, p, o, m) BOOST_PP_IF(p(216, s), m, BOOST_PP_TUPLE_EAT_2)(216, s) BOOST_PP_IF(p(216, s), BOOST_PP_FOR_216, BOOST_PP_TUPLE_EAT_4)(o(216, s), p, o, m)
|
||||
# define BOOST_PP_FOR_216_I(s, p, o, m) BOOST_PP_IF(p(217, s), m, BOOST_PP_TUPLE_EAT_2)(217, s) BOOST_PP_IF(p(217, s), BOOST_PP_FOR_217, BOOST_PP_TUPLE_EAT_4)(o(217, s), p, o, m)
|
||||
# define BOOST_PP_FOR_217_I(s, p, o, m) BOOST_PP_IF(p(218, s), m, BOOST_PP_TUPLE_EAT_2)(218, s) BOOST_PP_IF(p(218, s), BOOST_PP_FOR_218, BOOST_PP_TUPLE_EAT_4)(o(218, s), p, o, m)
|
||||
# define BOOST_PP_FOR_218_I(s, p, o, m) BOOST_PP_IF(p(219, s), m, BOOST_PP_TUPLE_EAT_2)(219, s) BOOST_PP_IF(p(219, s), BOOST_PP_FOR_219, BOOST_PP_TUPLE_EAT_4)(o(219, s), p, o, m)
|
||||
# define BOOST_PP_FOR_219_I(s, p, o, m) BOOST_PP_IF(p(220, s), m, BOOST_PP_TUPLE_EAT_2)(220, s) BOOST_PP_IF(p(220, s), BOOST_PP_FOR_220, BOOST_PP_TUPLE_EAT_4)(o(220, s), p, o, m)
|
||||
# define BOOST_PP_FOR_220_I(s, p, o, m) BOOST_PP_IF(p(221, s), m, BOOST_PP_TUPLE_EAT_2)(221, s) BOOST_PP_IF(p(221, s), BOOST_PP_FOR_221, BOOST_PP_TUPLE_EAT_4)(o(221, s), p, o, m)
|
||||
# define BOOST_PP_FOR_221_I(s, p, o, m) BOOST_PP_IF(p(222, s), m, BOOST_PP_TUPLE_EAT_2)(222, s) BOOST_PP_IF(p(222, s), BOOST_PP_FOR_222, BOOST_PP_TUPLE_EAT_4)(o(222, s), p, o, m)
|
||||
# define BOOST_PP_FOR_222_I(s, p, o, m) BOOST_PP_IF(p(223, s), m, BOOST_PP_TUPLE_EAT_2)(223, s) BOOST_PP_IF(p(223, s), BOOST_PP_FOR_223, BOOST_PP_TUPLE_EAT_4)(o(223, s), p, o, m)
|
||||
# define BOOST_PP_FOR_223_I(s, p, o, m) BOOST_PP_IF(p(224, s), m, BOOST_PP_TUPLE_EAT_2)(224, s) BOOST_PP_IF(p(224, s), BOOST_PP_FOR_224, BOOST_PP_TUPLE_EAT_4)(o(224, s), p, o, m)
|
||||
# define BOOST_PP_FOR_224_I(s, p, o, m) BOOST_PP_IF(p(225, s), m, BOOST_PP_TUPLE_EAT_2)(225, s) BOOST_PP_IF(p(225, s), BOOST_PP_FOR_225, BOOST_PP_TUPLE_EAT_4)(o(225, s), p, o, m)
|
||||
# define BOOST_PP_FOR_225_I(s, p, o, m) BOOST_PP_IF(p(226, s), m, BOOST_PP_TUPLE_EAT_2)(226, s) BOOST_PP_IF(p(226, s), BOOST_PP_FOR_226, BOOST_PP_TUPLE_EAT_4)(o(226, s), p, o, m)
|
||||
# define BOOST_PP_FOR_226_I(s, p, o, m) BOOST_PP_IF(p(227, s), m, BOOST_PP_TUPLE_EAT_2)(227, s) BOOST_PP_IF(p(227, s), BOOST_PP_FOR_227, BOOST_PP_TUPLE_EAT_4)(o(227, s), p, o, m)
|
||||
# define BOOST_PP_FOR_227_I(s, p, o, m) BOOST_PP_IF(p(228, s), m, BOOST_PP_TUPLE_EAT_2)(228, s) BOOST_PP_IF(p(228, s), BOOST_PP_FOR_228, BOOST_PP_TUPLE_EAT_4)(o(228, s), p, o, m)
|
||||
# define BOOST_PP_FOR_228_I(s, p, o, m) BOOST_PP_IF(p(229, s), m, BOOST_PP_TUPLE_EAT_2)(229, s) BOOST_PP_IF(p(229, s), BOOST_PP_FOR_229, BOOST_PP_TUPLE_EAT_4)(o(229, s), p, o, m)
|
||||
# define BOOST_PP_FOR_229_I(s, p, o, m) BOOST_PP_IF(p(230, s), m, BOOST_PP_TUPLE_EAT_2)(230, s) BOOST_PP_IF(p(230, s), BOOST_PP_FOR_230, BOOST_PP_TUPLE_EAT_4)(o(230, s), p, o, m)
|
||||
# define BOOST_PP_FOR_230_I(s, p, o, m) BOOST_PP_IF(p(231, s), m, BOOST_PP_TUPLE_EAT_2)(231, s) BOOST_PP_IF(p(231, s), BOOST_PP_FOR_231, BOOST_PP_TUPLE_EAT_4)(o(231, s), p, o, m)
|
||||
# define BOOST_PP_FOR_231_I(s, p, o, m) BOOST_PP_IF(p(232, s), m, BOOST_PP_TUPLE_EAT_2)(232, s) BOOST_PP_IF(p(232, s), BOOST_PP_FOR_232, BOOST_PP_TUPLE_EAT_4)(o(232, s), p, o, m)
|
||||
# define BOOST_PP_FOR_232_I(s, p, o, m) BOOST_PP_IF(p(233, s), m, BOOST_PP_TUPLE_EAT_2)(233, s) BOOST_PP_IF(p(233, s), BOOST_PP_FOR_233, BOOST_PP_TUPLE_EAT_4)(o(233, s), p, o, m)
|
||||
# define BOOST_PP_FOR_233_I(s, p, o, m) BOOST_PP_IF(p(234, s), m, BOOST_PP_TUPLE_EAT_2)(234, s) BOOST_PP_IF(p(234, s), BOOST_PP_FOR_234, BOOST_PP_TUPLE_EAT_4)(o(234, s), p, o, m)
|
||||
# define BOOST_PP_FOR_234_I(s, p, o, m) BOOST_PP_IF(p(235, s), m, BOOST_PP_TUPLE_EAT_2)(235, s) BOOST_PP_IF(p(235, s), BOOST_PP_FOR_235, BOOST_PP_TUPLE_EAT_4)(o(235, s), p, o, m)
|
||||
# define BOOST_PP_FOR_235_I(s, p, o, m) BOOST_PP_IF(p(236, s), m, BOOST_PP_TUPLE_EAT_2)(236, s) BOOST_PP_IF(p(236, s), BOOST_PP_FOR_236, BOOST_PP_TUPLE_EAT_4)(o(236, s), p, o, m)
|
||||
# define BOOST_PP_FOR_236_I(s, p, o, m) BOOST_PP_IF(p(237, s), m, BOOST_PP_TUPLE_EAT_2)(237, s) BOOST_PP_IF(p(237, s), BOOST_PP_FOR_237, BOOST_PP_TUPLE_EAT_4)(o(237, s), p, o, m)
|
||||
# define BOOST_PP_FOR_237_I(s, p, o, m) BOOST_PP_IF(p(238, s), m, BOOST_PP_TUPLE_EAT_2)(238, s) BOOST_PP_IF(p(238, s), BOOST_PP_FOR_238, BOOST_PP_TUPLE_EAT_4)(o(238, s), p, o, m)
|
||||
# define BOOST_PP_FOR_238_I(s, p, o, m) BOOST_PP_IF(p(239, s), m, BOOST_PP_TUPLE_EAT_2)(239, s) BOOST_PP_IF(p(239, s), BOOST_PP_FOR_239, BOOST_PP_TUPLE_EAT_4)(o(239, s), p, o, m)
|
||||
# define BOOST_PP_FOR_239_I(s, p, o, m) BOOST_PP_IF(p(240, s), m, BOOST_PP_TUPLE_EAT_2)(240, s) BOOST_PP_IF(p(240, s), BOOST_PP_FOR_240, BOOST_PP_TUPLE_EAT_4)(o(240, s), p, o, m)
|
||||
# define BOOST_PP_FOR_240_I(s, p, o, m) BOOST_PP_IF(p(241, s), m, BOOST_PP_TUPLE_EAT_2)(241, s) BOOST_PP_IF(p(241, s), BOOST_PP_FOR_241, BOOST_PP_TUPLE_EAT_4)(o(241, s), p, o, m)
|
||||
# define BOOST_PP_FOR_241_I(s, p, o, m) BOOST_PP_IF(p(242, s), m, BOOST_PP_TUPLE_EAT_2)(242, s) BOOST_PP_IF(p(242, s), BOOST_PP_FOR_242, BOOST_PP_TUPLE_EAT_4)(o(242, s), p, o, m)
|
||||
# define BOOST_PP_FOR_242_I(s, p, o, m) BOOST_PP_IF(p(243, s), m, BOOST_PP_TUPLE_EAT_2)(243, s) BOOST_PP_IF(p(243, s), BOOST_PP_FOR_243, BOOST_PP_TUPLE_EAT_4)(o(243, s), p, o, m)
|
||||
# define BOOST_PP_FOR_243_I(s, p, o, m) BOOST_PP_IF(p(244, s), m, BOOST_PP_TUPLE_EAT_2)(244, s) BOOST_PP_IF(p(244, s), BOOST_PP_FOR_244, BOOST_PP_TUPLE_EAT_4)(o(244, s), p, o, m)
|
||||
# define BOOST_PP_FOR_244_I(s, p, o, m) BOOST_PP_IF(p(245, s), m, BOOST_PP_TUPLE_EAT_2)(245, s) BOOST_PP_IF(p(245, s), BOOST_PP_FOR_245, BOOST_PP_TUPLE_EAT_4)(o(245, s), p, o, m)
|
||||
# define BOOST_PP_FOR_245_I(s, p, o, m) BOOST_PP_IF(p(246, s), m, BOOST_PP_TUPLE_EAT_2)(246, s) BOOST_PP_IF(p(246, s), BOOST_PP_FOR_246, BOOST_PP_TUPLE_EAT_4)(o(246, s), p, o, m)
|
||||
# define BOOST_PP_FOR_246_I(s, p, o, m) BOOST_PP_IF(p(247, s), m, BOOST_PP_TUPLE_EAT_2)(247, s) BOOST_PP_IF(p(247, s), BOOST_PP_FOR_247, BOOST_PP_TUPLE_EAT_4)(o(247, s), p, o, m)
|
||||
# define BOOST_PP_FOR_247_I(s, p, o, m) BOOST_PP_IF(p(248, s), m, BOOST_PP_TUPLE_EAT_2)(248, s) BOOST_PP_IF(p(248, s), BOOST_PP_FOR_248, BOOST_PP_TUPLE_EAT_4)(o(248, s), p, o, m)
|
||||
# define BOOST_PP_FOR_248_I(s, p, o, m) BOOST_PP_IF(p(249, s), m, BOOST_PP_TUPLE_EAT_2)(249, s) BOOST_PP_IF(p(249, s), BOOST_PP_FOR_249, BOOST_PP_TUPLE_EAT_4)(o(249, s), p, o, m)
|
||||
# define BOOST_PP_FOR_249_I(s, p, o, m) BOOST_PP_IF(p(250, s), m, BOOST_PP_TUPLE_EAT_2)(250, s) BOOST_PP_IF(p(250, s), BOOST_PP_FOR_250, BOOST_PP_TUPLE_EAT_4)(o(250, s), p, o, m)
|
||||
# define BOOST_PP_FOR_250_I(s, p, o, m) BOOST_PP_IF(p(251, s), m, BOOST_PP_TUPLE_EAT_2)(251, s) BOOST_PP_IF(p(251, s), BOOST_PP_FOR_251, BOOST_PP_TUPLE_EAT_4)(o(251, s), p, o, m)
|
||||
# define BOOST_PP_FOR_251_I(s, p, o, m) BOOST_PP_IF(p(252, s), m, BOOST_PP_TUPLE_EAT_2)(252, s) BOOST_PP_IF(p(252, s), BOOST_PP_FOR_252, BOOST_PP_TUPLE_EAT_4)(o(252, s), p, o, m)
|
||||
# define BOOST_PP_FOR_252_I(s, p, o, m) BOOST_PP_IF(p(253, s), m, BOOST_PP_TUPLE_EAT_2)(253, s) BOOST_PP_IF(p(253, s), BOOST_PP_FOR_253, BOOST_PP_TUPLE_EAT_4)(o(253, s), p, o, m)
|
||||
# define BOOST_PP_FOR_253_I(s, p, o, m) BOOST_PP_IF(p(254, s), m, BOOST_PP_TUPLE_EAT_2)(254, s) BOOST_PP_IF(p(254, s), BOOST_PP_FOR_254, BOOST_PP_TUPLE_EAT_4)(o(254, s), p, o, m)
|
||||
# define BOOST_PP_FOR_254_I(s, p, o, m) BOOST_PP_IF(p(255, s), m, BOOST_PP_TUPLE_EAT_2)(255, s) BOOST_PP_IF(p(255, s), BOOST_PP_FOR_255, BOOST_PP_TUPLE_EAT_4)(o(255, s), p, o, m)
|
||||
# define BOOST_PP_FOR_255_I(s, p, o, m) BOOST_PP_IF(p(256, s), m, BOOST_PP_TUPLE_EAT_2)(256, s) BOOST_PP_IF(p(256, s), BOOST_PP_FOR_256, BOOST_PP_TUPLE_EAT_4)(o(256, s), p, o, m)
|
||||
# define BOOST_PP_FOR_256_I(s, p, o, m) BOOST_PP_IF(p(257, s), m, BOOST_PP_TUPLE_EAT_2)(257, s) BOOST_PP_IF(p(257, s), BOOST_PP_FOR_257, BOOST_PP_TUPLE_EAT_4)(o(257, s), p, o, m)
|
||||
#
|
||||
# endif
|
||||
@@ -0,0 +1,94 @@
|
||||
|
||||
// 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)
|
||||
//
|
||||
|
||||
// *Preprocessed* version of the main "greater_equal.hpp" header
|
||||
// -- DO NOT modify by hand!
|
||||
|
||||
namespace boost { namespace mpl {
|
||||
|
||||
template<
|
||||
typename Tag1
|
||||
, typename Tag2
|
||||
>
|
||||
struct greater_equal_impl
|
||||
: if_c<
|
||||
( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
|
||||
> BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
|
||||
)
|
||||
|
||||
, aux::cast2nd_impl< greater_equal_impl< Tag1,Tag1 >,Tag1, Tag2 >
|
||||
, aux::cast1st_impl< greater_equal_impl< Tag2,Tag2 >,Tag1, Tag2 >
|
||||
>::type
|
||||
{
|
||||
};
|
||||
|
||||
/// for Digital Mars C++/compilers with no CTPS/TTP support
|
||||
template<> struct greater_equal_impl< na,na >
|
||||
{
|
||||
template< typename U1, typename U2 > struct apply
|
||||
{
|
||||
typedef apply type;
|
||||
BOOST_STATIC_CONSTANT(int, value = 0);
|
||||
};
|
||||
};
|
||||
|
||||
template< typename Tag > struct greater_equal_impl< na,Tag >
|
||||
{
|
||||
template< typename U1, typename U2 > struct apply
|
||||
{
|
||||
typedef apply type;
|
||||
BOOST_STATIC_CONSTANT(int, value = 0);
|
||||
};
|
||||
};
|
||||
|
||||
template< typename Tag > struct greater_equal_impl< Tag,na >
|
||||
{
|
||||
template< typename U1, typename U2 > struct apply
|
||||
{
|
||||
typedef apply type;
|
||||
BOOST_STATIC_CONSTANT(int, value = 0);
|
||||
};
|
||||
};
|
||||
|
||||
template< typename T > struct greater_equal_tag
|
||||
{
|
||||
typedef typename T::tag type;
|
||||
};
|
||||
|
||||
template<
|
||||
typename BOOST_MPL_AUX_NA_PARAM(N1)
|
||||
, typename BOOST_MPL_AUX_NA_PARAM(N2)
|
||||
>
|
||||
struct greater_equal
|
||||
|
||||
: greater_equal_impl<
|
||||
typename greater_equal_tag<N1>::type
|
||||
, typename greater_equal_tag<N2>::type
|
||||
>::template apply< N1,N2 >::type
|
||||
{
|
||||
BOOST_MPL_AUX_LAMBDA_SUPPORT(2, greater_equal, (N1, N2))
|
||||
|
||||
};
|
||||
|
||||
BOOST_MPL_AUX_NA_SPEC2(2, 2, greater_equal)
|
||||
|
||||
}}
|
||||
|
||||
namespace boost { namespace mpl {
|
||||
|
||||
template<>
|
||||
struct greater_equal_impl< integral_c_tag,integral_c_tag >
|
||||
{
|
||||
template< typename N1, typename N2 > struct apply
|
||||
|
||||
: bool_< ( BOOST_MPL_AUX_VALUE_WKND(N1)::value >= BOOST_MPL_AUX_VALUE_WKND(N2)::value ) >
|
||||
{
|
||||
};
|
||||
};
|
||||
|
||||
}}
|
||||
@@ -0,0 +1,27 @@
|
||||
|
||||
#ifndef BOOST_MPL_INT_FWD_HPP_INCLUDED
|
||||
#define BOOST_MPL_INT_FWD_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$
|
||||
|
||||
#include <boost/mpl/aux_/adl_barrier.hpp>
|
||||
#include <boost/mpl/aux_/nttp_decl.hpp>
|
||||
|
||||
BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
|
||||
|
||||
template< BOOST_MPL_AUX_NTTP_DECL(int, N) > struct int_;
|
||||
|
||||
BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
|
||||
BOOST_MPL_AUX_ADL_BARRIER_DECL(int_)
|
||||
|
||||
#endif // BOOST_MPL_INT_FWD_HPP_INCLUDED
|
||||
@@ -0,0 +1,150 @@
|
||||
/*==============================================================================
|
||||
Copyright (c) 2001-2010 Joel de Guzman
|
||||
Copyright (c) 2010 Eric Niebler
|
||||
Copyright (c) 2010-2011 Thomas Heller
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
#ifndef BOOST_PHOENIX_CORE_ARGUMENT_HPP
|
||||
#define BOOST_PHOENIX_CORE_ARGUMENT_HPP
|
||||
|
||||
#include <boost/phoenix/core/limits.hpp>
|
||||
#include <boost/phoenix/core/actor.hpp>
|
||||
#include <boost/phoenix/core/expression.hpp>
|
||||
#include <boost/phoenix/core/terminal.hpp>
|
||||
#include <boost/mpl/int.hpp>
|
||||
|
||||
namespace boost { namespace phoenix
|
||||
{
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// argument
|
||||
//
|
||||
// function for evaluating argument placeholders like: _1
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template <int I>
|
||||
struct argument
|
||||
//: mpl::int_<I>
|
||||
{
|
||||
typedef typename mpl::int_<I>::value_type value_type;
|
||||
static const value_type value = mpl::int_<I>::value;
|
||||
|
||||
bool operator==(argument) const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
template <int I2>
|
||||
bool operator==(argument<I2>) const
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}}
|
||||
|
||||
namespace boost {
|
||||
template <int I>
|
||||
struct is_placeholder<phoenix::argument<I> >
|
||||
: mpl::int_<I>
|
||||
{};
|
||||
}
|
||||
|
||||
namespace boost { namespace phoenix
|
||||
{
|
||||
namespace expression
|
||||
{
|
||||
template <int I>
|
||||
struct argument
|
||||
: expression::terminal<phoenix::argument<I> >
|
||||
{
|
||||
typedef typename expression::terminal<phoenix::argument<I> >::type type;
|
||||
static const type make()
|
||||
{
|
||||
type const e = {{{}}};
|
||||
return e;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#if !defined(BOOST_PHOENIX_DONT_USE_PREPROCESSED_FILES)
|
||||
|
||||
#include <boost/phoenix/core/detail/cpp03/preprocessed/argument.hpp>
|
||||
|
||||
#else
|
||||
|
||||
#if !defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
|
||||
#include <boost/phoenix/core/detail/argument.hpp>
|
||||
#else
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 2, line: 0, output: "detail/cpp03/preprocessed/argument_predefined_" BOOST_PHOENIX_LIMIT_STR ".hpp")
|
||||
#endif
|
||||
/*==============================================================================
|
||||
Copyright (c) 2001-2010 Joel de Guzman
|
||||
Copyright (c) 2010-2011 Thomas Heller
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 1)
|
||||
#endif
|
||||
|
||||
#ifdef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
|
||||
#undef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
|
||||
#define BOOST_PHOENIX_NO_PREDEFINED_TERMINALS_RESTORE
|
||||
#endif
|
||||
|
||||
#include <boost/phoenix/core/detail/argument.hpp>
|
||||
|
||||
#ifndef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS_RESTORE
|
||||
#define BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
|
||||
#undef BOOST_PHOENIX_NO_PREDEFINED_TERIMINALS_RESTORE
|
||||
#endif
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(output: null)
|
||||
#endif
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 2, line: 0, output: "detail/cpp03/preprocessed/argument_no_predefined_" BOOST_PHOENIX_LIMIT_STR ".hpp")
|
||||
#endif
|
||||
/*==============================================================================
|
||||
Copyright (c) 2001-2010 Joel de Guzman
|
||||
Copyright (c) 2010-2011 Thomas Heller
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
==============================================================================*/
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(preserve: 1)
|
||||
#endif
|
||||
|
||||
#ifndef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
|
||||
#define BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
|
||||
#define BOOST_PHOENIX_NO_PREDEFINED_TERMINALS_RESTORE
|
||||
#endif
|
||||
|
||||
#include <boost/phoenix/core/detail/argument.hpp>
|
||||
|
||||
#ifndef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS_RESTORE
|
||||
#undef BOOST_PHOENIX_NO_PREDEFINED_TERMINALS
|
||||
#undef BOOST_PHOENIX_NO_PREDEFINED_TERIMINALS_RESTORE
|
||||
#endif
|
||||
|
||||
#if defined(__WAVE__) && defined(BOOST_PHOENIX_CREATE_PREPROCESSED_FILES)
|
||||
#pragma wave option(output: null)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
}}
|
||||
|
||||
#endif
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,281 @@
|
||||
// Copyright (C) 2006 Douglas Gregor <doug.gregor -at- gmail.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)
|
||||
|
||||
/** @file environment.hpp
|
||||
*
|
||||
* This header provides the @c environment class, which provides
|
||||
* routines to initialize, finalization, and query the status of the
|
||||
* Boost MPI environment.
|
||||
*/
|
||||
#ifndef BOOST_MPI_ENVIRONMENT_HPP
|
||||
#define BOOST_MPI_ENVIRONMENT_HPP
|
||||
|
||||
#include <boost/mpi/config.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
#include <boost/optional.hpp>
|
||||
#include <string>
|
||||
#include <iosfwd>
|
||||
|
||||
namespace boost { namespace mpi {
|
||||
namespace threading {
|
||||
/** @brief specify the supported threading level.
|
||||
*
|
||||
* Based on MPI 2 standard/8.7.3
|
||||
*/
|
||||
enum level {
|
||||
/** Only one thread will execute.
|
||||
*/
|
||||
single = MPI_THREAD_SINGLE,
|
||||
/** Only main thread will do MPI calls.
|
||||
*
|
||||
* The process may be multi-threaded, but only the main
|
||||
* thread will make MPI calls (all MPI calls are ``funneled''
|
||||
* to the main thread).
|
||||
*/
|
||||
funneled = MPI_THREAD_FUNNELED,
|
||||
/** Only one thread at the time do MPI calls.
|
||||
*
|
||||
* The process may be multi-threaded, and multiple
|
||||
* threads may make MPI calls, but only one at a time:
|
||||
* MPI calls are not made concurrently from two distinct
|
||||
* threads (all MPI calls are ``serialized'').
|
||||
*/
|
||||
serialized = MPI_THREAD_SERIALIZED,
|
||||
/** Multiple thread may do MPI calls.
|
||||
*
|
||||
* Multiple threads may call MPI, with no restrictions.
|
||||
*/
|
||||
multiple = MPI_THREAD_MULTIPLE
|
||||
};
|
||||
|
||||
/** Formated output for threading level. */
|
||||
std::ostream& operator<<(std::ostream& out, level l);
|
||||
|
||||
/** Formated input for threading level. */
|
||||
std::istream& operator>>(std::istream& in, level& l);
|
||||
} // namespace threading
|
||||
/** @brief Initialize, finalize, and query the MPI environment.
|
||||
*
|
||||
* The @c environment class is used to initialize, finalize, and
|
||||
* query the MPI environment. It will typically be used in the @c
|
||||
* main() function of a program, which will create a single instance
|
||||
* of @c environment initialized with the arguments passed to the
|
||||
* program:
|
||||
*
|
||||
* @code
|
||||
* int main(int argc, char* argv[])
|
||||
* {
|
||||
* mpi::environment env(argc, argv);
|
||||
* }
|
||||
* @endcode
|
||||
*
|
||||
* The instance of @c environment will initialize MPI (by calling @c
|
||||
* MPI_Init) in its constructor and finalize MPI (by calling @c
|
||||
* MPI_Finalize for normal termination or @c MPI_Abort for an
|
||||
* uncaught exception) in its destructor.
|
||||
*
|
||||
* The use of @c environment is not mandatory. Users may choose to
|
||||
* invoke @c MPI_Init and @c MPI_Finalize manually. In this case, no
|
||||
* @c environment object is needed. If one is created, however, it
|
||||
* will do nothing on either construction or destruction.
|
||||
*/
|
||||
class BOOST_MPI_DECL environment : noncopyable {
|
||||
public:
|
||||
#ifdef BOOST_MPI_HAS_NOARG_INITIALIZATION
|
||||
/** Initialize the MPI environment.
|
||||
*
|
||||
* If the MPI environment has not already been initialized,
|
||||
* initializes MPI with a call to @c MPI_Init. Since this
|
||||
* constructor does not take command-line arguments (@c argc and @c
|
||||
* argv), it is only available when the underlying MPI
|
||||
* implementation supports calling @c MPI_Init with @c NULL
|
||||
* arguments, indicated by the macro @c
|
||||
* BOOST_MPI_HAS_NOARG_INITIALIZATION.
|
||||
*
|
||||
* @param abort_on_exception When true, this object will abort the
|
||||
* program if it is destructed due to an uncaught exception.
|
||||
*/
|
||||
explicit environment(bool abort_on_exception = true);
|
||||
/** Initialize the MPI environment.
|
||||
*
|
||||
* If the MPI environment has not already been initialized,
|
||||
* initializes MPI with a call to @c MPI_Init_thread. Since this
|
||||
* constructor does not take command-line arguments (@c argc and @c
|
||||
* argv), it is only available when the underlying MPI
|
||||
* implementation supports calling @c MPI_Init with @c NULL
|
||||
* arguments, indicated by the macro @c
|
||||
* BOOST_MPI_HAS_NOARG_INITIALIZATION.
|
||||
*
|
||||
* @param mt_level the required level of threading support.
|
||||
*
|
||||
* @param abort_on_exception When true, this object will abort the
|
||||
* program if it is destructed due to an uncaught exception.
|
||||
*/
|
||||
explicit environment(threading::level mt_level, bool abort_on_exception = true);
|
||||
#endif
|
||||
|
||||
/** Initialize the MPI environment.
|
||||
*
|
||||
* If the MPI environment has not already been initialized,
|
||||
* initializes MPI with a call to @c MPI_Init.
|
||||
*
|
||||
* @param argc The number of arguments provided in @p argv, as
|
||||
* passed into the program's @c main function.
|
||||
*
|
||||
* @param argv The array of argument strings passed to the program
|
||||
* via @c main.
|
||||
*
|
||||
* @param abort_on_exception When true, this object will abort the
|
||||
* program if it is destructed due to an uncaught exception.
|
||||
*/
|
||||
environment(int& argc, char** &argv, bool abort_on_exception = true);
|
||||
|
||||
/** Initialize the MPI environment.
|
||||
*
|
||||
* If the MPI environment has not already been initialized,
|
||||
* initializes MPI with a call to @c MPI_Init_thread.
|
||||
*
|
||||
* @param argc The number of arguments provided in @p argv, as
|
||||
* passed into the program's @c main function.
|
||||
*
|
||||
* @param argv The array of argument strings passed to the program
|
||||
* via @c main.
|
||||
*
|
||||
* @param mt_level the required level of threading support
|
||||
*
|
||||
* @param abort_on_exception When true, this object will abort the
|
||||
* program if it is destructed due to an uncaught exception.
|
||||
*/
|
||||
environment(int& argc, char** &argv, threading::level mt_level,
|
||||
bool abort_on_exception = true);
|
||||
|
||||
/** Shuts down the MPI environment.
|
||||
*
|
||||
* If this @c environment object was used to initialize the MPI
|
||||
* environment, and the MPI environment has not already been shut
|
||||
* down (finalized), this destructor will shut down the MPI
|
||||
* environment. Under normal circumstances, this only involves
|
||||
* invoking @c MPI_Finalize. However, if destruction is the result
|
||||
* of an uncaught exception and the @c abort_on_exception parameter
|
||||
* of the constructor had the value @c true, this destructor will
|
||||
* invoke @c MPI_Abort with @c MPI_COMM_WORLD to abort the entire
|
||||
* MPI program with a result code of -1.
|
||||
*/
|
||||
~environment();
|
||||
|
||||
/** Abort all MPI processes.
|
||||
*
|
||||
* Aborts all MPI processes and returns to the environment. The
|
||||
* precise behavior will be defined by the underlying MPI
|
||||
* implementation. This is equivalent to a call to @c MPI_Abort
|
||||
* with @c MPI_COMM_WORLD.
|
||||
*
|
||||
* @param errcode The error code to return to the environment.
|
||||
* @returns Will not return.
|
||||
*/
|
||||
static void abort(int errcode);
|
||||
|
||||
/** Determine if the MPI environment has already been initialized.
|
||||
*
|
||||
* This routine is equivalent to a call to @c MPI_Initialized.
|
||||
*
|
||||
* @returns @c true if the MPI environment has been initialized.
|
||||
*/
|
||||
static bool initialized();
|
||||
|
||||
/** Determine if the MPI environment has already been finalized.
|
||||
*
|
||||
* The routine is equivalent to a call to @c MPI_Finalized.
|
||||
*
|
||||
* @returns @c true if the MPI environment has been finalized.
|
||||
*/
|
||||
static bool finalized();
|
||||
|
||||
/** Retrieves the maximum tag value.
|
||||
*
|
||||
* Returns the maximum value that may be used for the @c tag
|
||||
* parameter of send/receive operations. This value will be
|
||||
* somewhat smaller than the value of @c MPI_TAG_UB, because the
|
||||
* Boost.MPI implementation reserves some tags for collective
|
||||
* operations.
|
||||
*
|
||||
* @returns the maximum tag value.
|
||||
*/
|
||||
static int max_tag();
|
||||
|
||||
/** The tag value used for collective operations.
|
||||
*
|
||||
* Returns the reserved tag value used by the Boost.MPI
|
||||
* implementation for collective operations. Although users are not
|
||||
* permitted to use this tag to send or receive messages, it may be
|
||||
* useful when monitoring communication patterns.
|
||||
*
|
||||
* @returns the tag value used for collective operations.
|
||||
*/
|
||||
static int collectives_tag();
|
||||
|
||||
/** Retrieves the rank of the host process, if one exists.
|
||||
*
|
||||
* If there is a host process, this routine returns the rank of
|
||||
* that process. Otherwise, it returns an empty @c
|
||||
* optional<int>. MPI does not define the meaning of a "host"
|
||||
* process: consult the documentation for the MPI
|
||||
* implementation. This routine examines the @c MPI_HOST attribute
|
||||
* of @c MPI_COMM_WORLD.
|
||||
*
|
||||
* @returns The rank of the host process, if one exists.
|
||||
*/
|
||||
static optional<int> host_rank();
|
||||
|
||||
/** Retrieves the rank of a process that can perform input/output.
|
||||
*
|
||||
* This routine returns the rank of a process that can perform
|
||||
* input/output via the standard C and C++ I/O facilities. If every
|
||||
* process can perform I/O using the standard facilities, this
|
||||
* routine will return @c any_source; if no process can perform
|
||||
* I/O, this routine will return no value (an empty @c
|
||||
* optional). This routine examines the @c MPI_IO attribute of @c
|
||||
* MPI_COMM_WORLD.
|
||||
*
|
||||
* @returns the rank of the process that can perform I/O, @c
|
||||
* any_source if every process can perform I/O, or no value if no
|
||||
* process can perform I/O.
|
||||
*/
|
||||
static optional<int> io_rank();
|
||||
|
||||
/** Retrieve the name of this processor.
|
||||
*
|
||||
* This routine returns the name of this processor. The actual form
|
||||
* of the name is unspecified, but may be documented by the
|
||||
* underlying MPI implementation. This routine is implemented as a
|
||||
* call to @c MPI_Get_processor_name.
|
||||
*
|
||||
* @returns the name of this processor.
|
||||
*/
|
||||
static std::string processor_name();
|
||||
|
||||
/** Query the current level of thread support.
|
||||
*/
|
||||
static threading::level thread_level();
|
||||
|
||||
/** Are we in the main thread?
|
||||
*/
|
||||
static bool is_main_thread();
|
||||
|
||||
private:
|
||||
/// Whether this environment object called MPI_Init
|
||||
bool i_initialized;
|
||||
|
||||
/// Whether we should abort if the destructor is
|
||||
bool abort_on_exception;
|
||||
|
||||
/// The number of reserved tags.
|
||||
static const int num_reserved_tags = 1;
|
||||
};
|
||||
|
||||
} } // end namespace boost::mpi
|
||||
|
||||
#endif // BOOST_MPI_ENVIRONMENT_HPP
|
||||
@@ -0,0 +1,303 @@
|
||||
#ifndef ISO_FORMAT_HPP___
|
||||
#define ISO_FORMAT_HPP___
|
||||
|
||||
/* Copyright (c) 2002,2003 CrystalClear Software, Inc.
|
||||
* Use, modification and distribution is subject to the
|
||||
* Boost Software License, Version 1.0. (See accompanying
|
||||
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
||||
* Author: Jeff Garland, Bart Garst
|
||||
* $Date$
|
||||
*/
|
||||
|
||||
#include "boost/date_time/parse_format_base.hpp"
|
||||
|
||||
namespace boost {
|
||||
namespace date_time {
|
||||
|
||||
//! Class to provide common iso formatting spec
|
||||
template<class charT>
|
||||
class iso_format_base {
|
||||
public:
|
||||
//! Describe month format -- its an integer in iso format
|
||||
static month_format_spec month_format()
|
||||
{
|
||||
return month_as_integer;
|
||||
}
|
||||
|
||||
//! String used printed is date is invalid
|
||||
static const charT* not_a_date()
|
||||
{
|
||||
return "not-a-date-time";
|
||||
}
|
||||
//! String used to for positive infinity value
|
||||
static const charT* pos_infinity()
|
||||
{
|
||||
return "+infinity";
|
||||
}
|
||||
//! String used to for positive infinity value
|
||||
static const charT* neg_infinity()
|
||||
{
|
||||
return "-infinity";
|
||||
}
|
||||
|
||||
//! ISO char for a year -- used in durations
|
||||
static charT year_sep_char()
|
||||
{
|
||||
return 'Y';
|
||||
}
|
||||
//! ISO char for a month
|
||||
static charT month_sep_char()
|
||||
{
|
||||
return '-';
|
||||
}
|
||||
//! ISO char for a day
|
||||
static charT day_sep_char()
|
||||
{
|
||||
return '-';
|
||||
}
|
||||
//! char for minute
|
||||
static charT hour_sep_char()
|
||||
{
|
||||
return ':';
|
||||
}
|
||||
//! char for minute
|
||||
static charT minute_sep_char()
|
||||
{
|
||||
return ':';
|
||||
}
|
||||
//! char for second
|
||||
static charT second_sep_char()
|
||||
{
|
||||
return ':';
|
||||
}
|
||||
//! ISO char for a period
|
||||
static charT period_start_char()
|
||||
{
|
||||
return 'P';
|
||||
}
|
||||
//! Used in time in mixed strings to set start of time
|
||||
static charT time_start_char()
|
||||
{
|
||||
return 'T';
|
||||
}
|
||||
|
||||
//! Used in mixed strings to identify start of a week number
|
||||
static charT week_start_char()
|
||||
{
|
||||
return 'W';
|
||||
}
|
||||
|
||||
//! Separators for periods
|
||||
static charT period_sep_char()
|
||||
{
|
||||
return '/';
|
||||
}
|
||||
//! Separator for hh:mm:ss
|
||||
static charT time_sep_char()
|
||||
{
|
||||
return ':';
|
||||
}
|
||||
//! Preferred Separator for hh:mm:ss,decimal_fraction
|
||||
static charT fractional_time_sep_char()
|
||||
{
|
||||
return ',';
|
||||
}
|
||||
|
||||
static bool is_component_sep(charT sep)
|
||||
{
|
||||
switch(sep) {
|
||||
case 'H':
|
||||
case 'M':
|
||||
case 'S':
|
||||
case 'W':
|
||||
case 'T':
|
||||
case 'Y':
|
||||
case 'D':return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static bool is_fractional_time_sep(charT sep)
|
||||
{
|
||||
switch(sep) {
|
||||
case ',':
|
||||
case '.': return true;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
static bool is_timezone_sep(charT sep)
|
||||
{
|
||||
switch(sep) {
|
||||
case '+':
|
||||
case '-': return true;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
static charT element_sep_char()
|
||||
{
|
||||
return '-';
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#ifndef BOOST_NO_STD_WSTRING
|
||||
|
||||
//! Class to provide common iso formatting spec
|
||||
template<>
|
||||
class iso_format_base<wchar_t> {
|
||||
public:
|
||||
//! Describe month format -- its an integer in iso format
|
||||
static month_format_spec month_format()
|
||||
{
|
||||
return month_as_integer;
|
||||
}
|
||||
|
||||
//! String used printed is date is invalid
|
||||
static const wchar_t* not_a_date()
|
||||
{
|
||||
return L"not-a-date-time";
|
||||
}
|
||||
//! String used to for positive infinity value
|
||||
static const wchar_t* pos_infinity()
|
||||
{
|
||||
return L"+infinity";
|
||||
}
|
||||
//! String used to for positive infinity value
|
||||
static const wchar_t* neg_infinity()
|
||||
{
|
||||
return L"-infinity";
|
||||
}
|
||||
|
||||
//! ISO char for a year -- used in durations
|
||||
static wchar_t year_sep_char()
|
||||
{
|
||||
return 'Y';
|
||||
}
|
||||
//! ISO char for a month
|
||||
static wchar_t month_sep_char()
|
||||
{
|
||||
return '-';
|
||||
}
|
||||
//! ISO char for a day
|
||||
static wchar_t day_sep_char()
|
||||
{
|
||||
return '-';
|
||||
}
|
||||
//! char for minute
|
||||
static wchar_t hour_sep_char()
|
||||
{
|
||||
return ':';
|
||||
}
|
||||
//! char for minute
|
||||
static wchar_t minute_sep_char()
|
||||
{
|
||||
return ':';
|
||||
}
|
||||
//! char for second
|
||||
static wchar_t second_sep_char()
|
||||
{
|
||||
return ':';
|
||||
}
|
||||
//! ISO char for a period
|
||||
static wchar_t period_start_char()
|
||||
{
|
||||
return 'P';
|
||||
}
|
||||
//! Used in time in mixed strings to set start of time
|
||||
static wchar_t time_start_char()
|
||||
{
|
||||
return 'T';
|
||||
}
|
||||
|
||||
//! Used in mixed strings to identify start of a week number
|
||||
static wchar_t week_start_char()
|
||||
{
|
||||
return 'W';
|
||||
}
|
||||
|
||||
//! Separators for periods
|
||||
static wchar_t period_sep_char()
|
||||
{
|
||||
return '/';
|
||||
}
|
||||
//! Separator for hh:mm:ss
|
||||
static wchar_t time_sep_char()
|
||||
{
|
||||
return ':';
|
||||
}
|
||||
//! Preferred Separator for hh:mm:ss,decimal_fraction
|
||||
static wchar_t fractional_time_sep_char()
|
||||
{
|
||||
return ',';
|
||||
}
|
||||
|
||||
static bool is_component_sep(wchar_t sep)
|
||||
{
|
||||
switch(sep) {
|
||||
case 'H':
|
||||
case 'M':
|
||||
case 'S':
|
||||
case 'W':
|
||||
case 'T':
|
||||
case 'Y':
|
||||
case 'D':return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static bool is_fractional_time_sep(wchar_t sep)
|
||||
{
|
||||
switch(sep) {
|
||||
case ',':
|
||||
case '.': return true;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
static bool is_timezone_sep(wchar_t sep)
|
||||
{
|
||||
switch(sep) {
|
||||
case '+':
|
||||
case '-': return true;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
static wchar_t element_sep_char()
|
||||
{
|
||||
return '-';
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif // BOOST_NO_STD_WSTRING
|
||||
|
||||
//! Format description for iso normal YYYYMMDD
|
||||
template<class charT>
|
||||
class iso_format : public iso_format_base<charT> {
|
||||
public:
|
||||
//! The ios standard format doesn't use char separators
|
||||
static bool has_date_sep_chars()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
//! Extended format uses seperators YYYY-MM-DD
|
||||
template<class charT>
|
||||
class iso_extended_format : public iso_format_base<charT> {
|
||||
public:
|
||||
//! Extended format needs char separators
|
||||
static bool has_date_sep_chars()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
} } //namespace date_time
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user