Compare commits

..

1 Commits

Author SHA1 Message Date
Beman Dawes 19aa2793b3 Release 1.48.0
[SVN r75495]
2011-11-15 15:44:44 +00:00
70 changed files with 141 additions and 1273 deletions
+1 -1
View File
@@ -35,7 +35,7 @@ metafunctions. It provides a conceptual foundation and an extensive
set of powerful and coherent tools that make doing explict metaprogramming
in C++ as easy and enjoyable as possible within the current language.</p>
<p>There are several places to start when getting familiar with the library,
depending on what you know about metaprogramming in general and
depending on what your know about metaprogramming in general and
C++ template metaprogramming in particular. Starting with
Boost version 1.32, the MPL comes with both an <a class="reference" href="./tutorial/tutorial-metafunctions.html">in-depth tutorial</a> on its
fundamental concepts and an annotated <a class="reference" href="./tutorial/reference-manual.html">reference manual</a> covering all concepts
+2 -2
View File
@@ -123,7 +123,7 @@ typedef <a href="./next.html" class="identifier">next</a>&lt;i<sub>n</sub>&gt;::
</tr>
<tr class="field"><th class="field-name">Postcondition:</th><td class="field-body"><p class="first">Equivalent to</p>
<pre class="last literal-block">
<a href="./for-each.html" class="identifier">for_each</a>&lt; <a href="./transform-view.html" class="identifier">transform_view</a>&lt;s,op&gt; &gt;( f );
<a href="./for-each.html" class="identifier">for_each</a>&lt; tranform_view&lt;s,op&gt; &gt;( f );
</pre>
</td>
</tr>
@@ -141,7 +141,7 @@ struct value_printer
{
template&lt; typename U &gt; void operator()(U x)
{
std::cout &lt;&lt; x &lt;&lt; '\n';
std::cout &lt;&lt; x &lt;&lt; 'n';
}
};
-122
View File
@@ -1,122 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.7: http://docutils.sourceforge.net/" />
<title>The MPL Reference Manual: BOOST_MPL_GET_TAG_DEF</title>
<link rel="stylesheet" href="../style.css" type="text/css" />
</head>
<body class="docframe refmanual">
<table class="header"><tr class="header"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./introspection.html" class="navigation-link">Prev</a>&nbsp;<a href="./has-xxx-trait-named-def.html" class="navigation-link">Next</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./introspection.html" class="navigation-link">Back</a>&nbsp;<a href="./get-tag-def.html" class="navigation-link">Along</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./introspection.html" class="navigation-link">Up</a>&nbsp;<a href="../refmanual.html" class="navigation-link">Home</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./refmanual_toc.html" class="navigation-link">Full TOC</a></span></td>
<td class="header-group page-location"><a href="../refmanual.html" class="navigation-link">Front Page</a> / <a href="./macros.html" class="navigation-link">Macros</a> / <a href="./introspection.html" class="navigation-link">Introspection</a> / <a href="./has-xxx-trait-def.html" class="navigation-link">BOOST_MPL_GET_TAG_DEF</a></td>
</tr></table><div class="header-separator"></div>
<div class="section" id="boost-mpl-has-xxx-trait-def">
<h1><a class="toc-backref" href="./introspection.html#id1595">BOOST_MPL_GET_TAG_DEF</a></h1>
<div class="section" id="id1329">
<h3><a class="subsection-title" href="#synopsis" name="synopsis">Synopsis</a></h3>
<pre class="literal-block">
#define <a href="./has-xxx-trait-def.html" class="identifier">BOOST_MPL_GET_TAG_DEF</a>(name) \
<em>unspecified token sequence</em> \
/**/
</pre>
</div>
<div class="section" id="id1330">
<h3><a class="subsection-title" href="#description" name="description">Description</a></h3>
<p>Expands into a definition of a lazy getter <a class="reference internal" href="./metafunction.html">Metafunction</a> <tt class="literal"><span class="pre">get_tag_name</span></tt>
such that for any type <tt class="literal"><span class="pre">x</span></tt> <tt class="literal"><span class="pre">get_tag_name&lt;x&gt;::type</span> <span class="pre">is</span> <span class="pre">type</span></tt> where
<tt class="literal"><span class="pre">name</span></tt> is a nested type member of <tt class="literal"><span class="pre">x</span></tt>.</p>
</div>
<div class="section" id="id1331">
<h3><a class="subsection-title" href="#header" name="header">Header</a></h3>
<pre class="literal-block">
#include &lt;<a href="../../../../boost/mpl/get_tag.hpp" class="header">boost/mpl/get_tag.hpp</a>&gt;
</pre>
</div>
<div class="section" id="id1332">
<h3><a class="subsection-title" href="#parameters" name="parameters">Parameters</a></h3>
<table border="1" class="docutils table">
<colgroup>
<col width="15%" />
<col width="32%" />
<col width="53%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Parameter</th>
<th class="head">Requirement</th>
<th class="head">Description</th>
</tr>
</thead>
<tbody valign="top">
<tr><td><tt class="literal"><span class="pre">name</span></tt></td>
<td>A legal identifier token</td>
<td>A name of the member to get.</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="id1333">
<h3><a class="subsection-title" href="#expression-semantics" name="expression-semantics">Expression semantics</a></h3>
<p>For any legal C++ identifier <tt class="literal"><span class="pre">name</span></tt>:</p>
<pre class="literal-block">
<a href="./has-xxx-trait-def.html" class="identifier">BOOST_MPL_GET_TAG_DEF</a>(name)
</pre>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field"><th class="field-name">Precondition:</th><td class="field-body"><p class="first">Appears at namespace scope.</p>
</td>
</tr>
<tr class="field"><th class="field-name">Return type:</th><td class="field-body"><p class="first">None.</p>
</td>
</tr>
<tr class="field"><th class="field-name">Semantics:</th><td class="field-body"><p class="first">Equivalent to</p>
<pre class="last literal-block">
namespace boost { namespace mpl {</pre>
<pre class="last literal-block">
template<typename T>&lt;class T&gt;
struct get_##name {
typedef typename T::name type;
};</pre>
<pre class="last literal-block">
}}<typename T>
</pre>
</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="id1334">
<h3><a class="subsection-title" href="#example" name="example">Example</a></h3>
<pre class="literal-block">
struct test_type_get_tag_def;
<a href="get-tag-def.html" class="identifier">BOOST_MPL_GET_TAG_DEF</a>(a_tag);
namespace boost { namespace mpl {
struct test_type_get_tag_def
{
typedef int a_tag;
};
}}
typedef boost::mpl::get_a_tag&lt;<test_type_get_tag_def>test_type_get_tag_def&gt;::type got_the_tag;
</pre>
</div>
<div class="section" id="id1335">
<h3><a class="subsection-title" href="#see-also" name="see-also">See also</a></h3>
<p><a class="reference internal" href="./macros.html">Macros</a>, <a class="reference internal" href="./has-xxx-trait-named-def.html">BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF</a>
<!-- Macros/Introspection/BOOST_MPL_GET_TAG_DEF -->
</div>
</div>
<div class="footer-separator"></div>
<table class="footer"><tr class="footer"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./introspection.html" class="navigation-link">Prev</a>&nbsp;<a href="./has-xxx-template-named-def.html" class="navigation-link">Next</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./introspection.html" class="navigation-link">Back</a>&nbsp;<a href="./get-tag-def.html" class="navigation-link">Along</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./introspection.html" class="navigation-link">Up</a>&nbsp;<a href="../refmanual.html" class="navigation-link">Home</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./refmanual_toc.html" class="navigation-link">Full TOC</a></span></td>
<td><div class="copyright-footer"><div class="copyright">Copyright © 2017 Sergey Krivonos and Edward Diener</div>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a class="reference external" href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)</div></td></tr></table></body>
</html>
-1
View File
@@ -19,7 +19,6 @@
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<ul class="toc simple" id="outline">
<li><a class="reference internal" href="./get-tag-def.html" id="id1615">BOOST_MPL_GET_TAG_DEF</a></li>
<li><a class="reference internal" href="./has-xxx-template-def.html" id="id1593">BOOST_MPL_HAS_XXX_TEMPLATE_DEF</a></li>
<li><a class="reference internal" href="./has-xxx-template-named-def.html" id="id1594">BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF</a></li>
<li><a class="reference internal" href="./has-xxx-trait-def.html" id="id1595">BOOST_MPL_HAS_XXX_TRAIT_DEF</a></li>
+1 -1
View File
@@ -142,7 +142,7 @@ of <tt class="literal"><span class="pre">l</span></tt> in the same order; see
<h3><a class="subsection-title" href="#example" name="example">Example</a></h3>
<pre class="literal-block">
typedef <a href="./list.html" class="identifier">list</a>&lt;float,double,long double&gt; floats;
typedef <a href="./push-front.html" class="identifier">push_front</a>&lt;floats,int&gt;::type types;
typedef <a href="./push-front.html" class="identifier">push_front</a>&lt;floating_types,int&gt;::type types;
<a href="./assert.html" class="identifier">BOOST_MPL_ASSERT</a>(( is_same&lt; <a href="./front.html" class="identifier">front</a>&lt;types&gt;::type, int > ));
</pre>
-1
View File
@@ -276,7 +276,6 @@
</ul>
</li>
<li><a class="reference internal" href="./introspection.html" id="id1592">Introspection</a><ul class="toc" id="outline">
<li><a class="reference internal" href="./get-tag-def.html" id="id1615">BOOST_MPL_GET_TAG_DEF</a></li>
<li><a class="reference internal" href="./has-xxx-template-def.html" id="id1593">BOOST_MPL_HAS_XXX_TEMPLATE_DEF</a></li>
<li><a class="reference internal" href="./has-xxx-template-named-def.html" id="id1594">BOOST_MPL_HAS_XXX_TEMPLATE_NAMED_DEF</a></li>
<li><a class="reference internal" href="./has-xxx-trait-def.html" id="id1595">BOOST_MPL_HAS_XXX_TRAIT_DEF</a></li>
+2 -2
View File
@@ -5,7 +5,7 @@ it possible to decouple `algorithms`__ from concrete compile-time `sequence
implementations`__. Under the hood, all MPL sequence algorithms are
implemented in terms of iterators. In particular, that means that they
will work on any custom compile-time sequence, given that the appropriate
iterator interface is provided.
iterator inteface is provided.
__ `Algorithms`_
__ `label-Sequences-Classes`_
@@ -14,6 +14,6 @@ __ `label-Sequences-Classes`_
.. More?
.. copyright:: Copyright © 2001-2009 Aleksey Gurtovoy and David Abrahams
.. copyright:: Copyright © 2001-2009 Aleksey Gurtovoy and David Abrahams
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)
+1 -1
View File
@@ -102,7 +102,7 @@ Example
.. parsed-literal::
typedef list<float,double,long double> floats;
typedef push_front<floats,int>::type types;
typedef push_front<floating_types,int>::type types;
BOOST_MPL_ASSERT(( is_same< front<types>::type, int > ));
+1 -1
View File
@@ -78,7 +78,7 @@ one.</p>
</ol>
<p>To get a detailed picture of the new apply/lambda semantics, please
see the test case at
<a class="reference" href="../../test/apply.cpp" target="_top">libs/mpl/test/apply.cpp</a>
<a class="reference" href="http://cvs.sourceforge.net/viewcvs.py/boost/boost/libs/mpl/test/apply.cpp?view=markup" target="_top">http://cvs.sourceforge.net/viewcvs.py/boost/boost/libs/mpl/test/apply.cpp?view=markup</a>
and the corresponding sections of the MPL <a class="reference" href="./reference-manual.html">reference manual</a>.</p>
<table class="footnote" frame="void" id="id21" rules="none">
<colgroup><col class="label" /><col /></colgroup>
+1 -1
View File
@@ -113,7 +113,7 @@ arguments), which comes down to the follwing two criteria:</p>
placeholders do contain these).</li>
</ol>
<p>If these two hold, you can safely put <tt class="literal"><span class="pre">BOOST_MPL_AUX_LAMBDA_SUPPORT</span></tt> inside
your metafunction and forget about the issue. If not, you are out of luck and
your metafunction and forget about the issue. If not, your are out of luck and
probably have to write a metafunction class instead.</p>
<p>The good news are that most of the MPL's own metafunctions and <a class="reference" href="../../../type_traits/index.html" target="_top">Boost.Type Traits</a>
templates are &quot;placeholder-safe&quot; and have the workaround applied to them, so
+1 -1
View File
@@ -24,7 +24,7 @@ arguments of different types, and the result will yield the
largest/most general of the argument types. The infrastructure
allows user-defined numeric types to be freely intermixed with
predefined library types. See
<a class="reference" href="../../test/numeric_ops.cpp" target="_top">libs/mpl/test/numeric_ops.cpp</a>
<a class="reference" href="http://cvs.sourceforge.net/viewcvs.py/boost/boost/libs/mpl/test/numeric_ops.cpp?view=markup" target="_top">http://cvs.sourceforge.net/viewcvs.py/boost/boost/libs/mpl/test/numeric_ops.cpp?view=markup</a>
for an illustrative example, and the <a class="reference" href="./reference-manual.html">reference manual</a> for
the formal infrastructure specification.</p>
<p>If you were using MPL numeric metafunctions on your own integral
-1
View File
@@ -1 +0,0 @@
ECHO is on.
-20
View File
@@ -15,7 +15,6 @@
// $Revision$
#include <memory>
#include <boost/config.hpp>
namespace fsm { namespace aux {
@@ -26,32 +25,13 @@ struct base_event
public:
virtual ~base_event() {};
#if defined(BOOST_NO_CXX11_SMART_PTR)
std::auto_ptr<base_event> clone() const
#else
std::unique_ptr<base_event> clone() const
#endif
{
return do_clone();
}
private:
#if defined(BOOST_NO_CXX11_SMART_PTR)
virtual std::auto_ptr<base_event> do_clone() const = 0;
#else
virtual std::unique_ptr<base_event> do_clone() const = 0;
#endif
};
}}
-15
View File
@@ -26,27 +26,12 @@ struct event
typedef base_event base_t;
private:
#if defined(BOOST_NO_CXX11_SMART_PTR)
virtual std::auto_ptr<base_event> do_clone() const
{
return std::auto_ptr<base_event>(
new Derived(static_cast<Derived const&>(*this))
);
}
#else
virtual std::unique_ptr<base_event> do_clone() const
{
return std::unique_ptr<base_event>(
new Derived(static_cast<Derived const&>(*this))
);
}
#endif
};
}}
-10
View File
@@ -83,17 +83,7 @@ class state_machine
{
}
#if defined(BOOST_NO_CXX11_SMART_PTR)
void post_event(std::auto_ptr<base_event_t const> evt)
#else
void post_event(std::unique_ptr<base_event_t const> evt)
#endif
{
m_events_queue.push(base_event_ptr_t(evt.release()));
}
+4 -3
View File
@@ -14,7 +14,7 @@
// $Date$
// $Revision$
#include <boost/mpl/aux_/preprocessor/default_params.hpp>
#include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
#include <boost/mpl/aux_/na.hpp>
#include <boost/mpl/aux_/arity_spec.hpp>
@@ -23,7 +23,8 @@ namespace boost { namespace mpl {
template< typename Value > struct always
{
template<
BOOST_MPL_PP_DEFAULT_PARAMS(BOOST_MPL_LIMIT_METAFUNCTION_ARITY, typename T, na)
typename T
BOOST_MPL_PP_NESTED_DEF_PARAMS_TAIL(1, typename T, na)
>
struct apply
{
@@ -31,7 +32,7 @@ template< typename Value > struct always
};
};
BOOST_MPL_AUX_ARITY_SPEC(0, always)
BOOST_MPL_AUX_ARITY_SPEC(1, always)
}}
+2 -2
View File
@@ -28,7 +28,7 @@
// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(and)'
// has to be checked in a separate condition, otherwise GCC complains
// about 'and' being an alternative token
#if defined(_MSC_VER) && !defined(__clang__)
#if defined(_MSC_VER)
#ifndef __GCCXML__
#if defined(and)
# pragma push_macro("and")
@@ -41,7 +41,7 @@
# define BOOST_MPL_PREPROCESSED_HEADER and.hpp
# include <boost/mpl/aux_/include_preprocessed.hpp>
#if defined(_MSC_VER) && !defined(__clang__)
#if defined(_MSC_VER)
#ifndef __GCCXML__
#if defined(and)
# pragma pop_macro("and")
+2 -71
View File
@@ -25,7 +25,6 @@
#include <boost/mpl/aux_/config/dtp.hpp>
#include <boost/mpl/aux_/config/gcc.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/gpu.hpp>
#include <boost/mpl/aux_/config/static_constant.hpp>
#include <boost/mpl/aux_/config/pp_counter.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
@@ -35,9 +34,6 @@
#include <boost/config.hpp> // make sure 'size_t' is placed into 'std'
#include <cstddef>
#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)
#include <boost/mpl/if.hpp>
#endif
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
|| (BOOST_MPL_CFG_GCC != 0) \
@@ -56,7 +52,7 @@
// and GCC (which issues "unused variable" warnings when static constants are used
// at a function scope)
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
|| (BOOST_MPL_CFG_GCC != 0) || (BOOST_MPL_CFG_GPU != 0) || defined(__PGI)
|| (BOOST_MPL_CFG_GCC != 0)
# define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) enum { expr }
#else
# define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) BOOST_STATIC_CONSTANT(T, expr)
@@ -135,38 +131,8 @@ template< assert_::relations r, long x, long y > struct assert_relation {};
#endif
#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)
template<class Pred>
struct extract_assert_pred;
template<class Pred>
struct extract_assert_pred<void(Pred)> { typedef Pred type; };
template<class Pred>
struct eval_assert {
typedef typename extract_assert_pred<Pred>::type P;
typedef typename P::type p_type;
typedef typename ::boost::mpl::if_c<p_type::value,
AUX778076_ASSERT_ARG(assert<false>),
failed ************ P::************
>::type type;
};
template<class Pred>
struct eval_assert_not {
typedef typename extract_assert_pred<Pred>::type P;
typedef typename P::type p_type;
typedef typename ::boost::mpl::if_c<!p_type::value,
AUX778076_ASSERT_ARG(assert<false>),
failed ************ ::boost::mpl::not_<P>::************
>::type type;
};
template< typename T >
T make_assert_arg();
#elif !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
#if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
template< bool > struct assert_arg_pred_impl { typedef int type; };
template<> struct assert_arg_pred_impl<true> { typedef void* type; };
@@ -245,39 +211,6 @@ assert_rel_arg( assert_relation<r,x,y> );
BOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
#if BOOST_WORKAROUND(BOOST_MSVC, == 1700)
// BOOST_MPL_ASSERT((pred<x,...>))
#define BOOST_MPL_ASSERT(pred) \
BOOST_MPL_AUX_ASSERT_CONSTANT( \
std::size_t \
, BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
boost::mpl::assertion_failed<false>( \
boost::mpl::make_assert_arg< \
typename boost::mpl::eval_assert<void pred>::type \
>() \
) \
) \
) \
/**/
// BOOST_MPL_ASSERT_NOT((pred<x,...>))
#define BOOST_MPL_ASSERT_NOT(pred) \
BOOST_MPL_AUX_ASSERT_CONSTANT( \
std::size_t \
, BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
boost::mpl::assertion_failed<false>( \
boost::mpl::make_assert_arg< \
typename boost::mpl::eval_assert_not<void pred>::type \
>() \
) \
) \
) \
/**/
#else
// BOOST_MPL_ASSERT((pred<x,...>))
@@ -317,8 +250,6 @@ BOOST_MPL_AUX_ASSERT_CONSTANT( \
/**/
#endif
#endif
// BOOST_MPL_ASSERT_RELATION(x, ==|!=|<=|<|>=|>, y)
#if defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)
-35
View File
@@ -1,35 +0,0 @@
#ifndef BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED
#define BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED
// Copyright Eric Niebler 2014
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
#include <boost/config.hpp>
#if !defined(BOOST_MPL_CFG_GPU_ENABLED) \
# define BOOST_MPL_CFG_GPU_ENABLED BOOST_GPU_ENABLED
#endif
#if defined __CUDACC__
# define BOOST_MPL_CFG_GPU 1
#else
# define BOOST_MPL_CFG_GPU 0
#endif
#endif // BOOST_MPL_AUX_CONFIG_GPU_HPP_INCLUDED
@@ -24,7 +24,6 @@
|| BOOST_WORKAROUND(__EDG_VERSION__, <= 245) \
|| BOOST_WORKAROUND(BOOST_MPL_CFG_GCC, <= 0x0295) \
|| BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
|| BOOST_WORKAROUND(__NVCC__, BOOST_TESTED_AT(1)) \
)
# define BOOST_MPL_CFG_USE_OPERATORS_OVERLOADING
+16 -19
View File
@@ -14,10 +14,9 @@
// $Date$
// $Revision$
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/insert.hpp>
#include <boost/mpl/copy.hpp>
#include <boost/mpl/clear.hpp>
#include <boost/mpl/front_inserter.hpp>
#include <boost/mpl/joint_view.hpp>
#include <boost/mpl/iterator_range.hpp>
#include <boost/mpl/aux_/na_spec.hpp>
@@ -44,31 +43,29 @@ struct insert_range_impl
>
struct apply
#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
: reverse_fold<
joint_view<
: reverse_copy<
joint_view<
iterator_range<typename begin<Sequence>::type,Pos>
, joint_view<
, joint_view<
Range
, iterator_range<Pos,typename end<Sequence>::type>
>
>
, typename clear<Sequence>::type
, insert<_1, begin<_1>, _2>
, front_inserter< typename clear<Sequence>::type >
>
{
#else
{
typedef typename reverse_fold<
joint_view<
iterator_range<typename begin<Sequence>::type,Pos>
, joint_view<
Range
, iterator_range<Pos,typename end<Sequence>::type>
>
>
, typename clear<Sequence>::type
, insert<_1, begin<_1>, _2>
>::type type;
typedef typename reverse_copy<
joint_view<
iterator_range<typename begin<Sequence>::type,Pos>
, joint_view<
Range
, iterator_range<Pos,typename end<Sequence>::type>
>
>
, front_inserter< typename clear<Sequence>::type >
>::type type;
#endif
};
};
+1 -1
View File
@@ -77,7 +77,7 @@ struct AUX_WRAPPER_NAME
// functions that return objects of both arithmetic ('int', 'long',
// 'double', etc.) and wrapped integral types (for an example, see
// "mpl/example/power.cpp")
BOOST_CONSTEXPR operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast<AUX_WRAPPER_VALUE_TYPE>(this->value); }
operator AUX_WRAPPER_VALUE_TYPE() const { return static_cast<AUX_WRAPPER_VALUE_TYPE>(this->value); }
};
#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
@@ -15,16 +15,9 @@
// $Revision$
#include <boost/preprocessor/seq/subseq.hpp>
#include <boost/preprocessor/repetition/repeat.hpp>
#include <boost/preprocessor/arithmetic/add.hpp>
#define BOOST_MPL_PP_RANGE_ITEM(z,n,_) (n)
#define BOOST_MPL_PP_RANGE(first, length) \
BOOST_PP_SEQ_SUBSEQ( \
BOOST_PP_REPEAT(BOOST_PP_ADD(first,length), BOOST_MPL_PP_RANGE_ITEM, _), \
first, length \
) \
BOOST_PP_SEQ_SUBSEQ((0)(1)(2)(3)(4)(5)(6)(7)(8)(9), first, length) \
/**/
#endif // BOOST_MPL_AUX_PREPROCESSOR_RANGE_HPP_INCLUDED
-4
View File
@@ -16,12 +16,10 @@
// $Revision$
#include <boost/ref.hpp>
#include <boost/mpl/aux_/config/gpu.hpp>
namespace boost { namespace mpl { namespace aux {
template< typename F >
BOOST_MPL_CFG_GPU_ENABLED
inline
F& unwrap(F& f, long)
{
@@ -29,7 +27,6 @@ F& unwrap(F& f, long)
}
template< typename F >
BOOST_MPL_CFG_GPU_ENABLED
inline
F&
unwrap(reference_wrapper<F>& f, int)
@@ -38,7 +35,6 @@ unwrap(reference_wrapper<F>& f, int)
}
template< typename F >
BOOST_MPL_CFG_GPU_ENABLED
inline
F&
unwrap(reference_wrapper<F> const& f, int)
+2 -2
View File
@@ -19,7 +19,7 @@
// macros, see http://tinyurl.com/ycwdxco; 'defined(bitand)'
// has to be checked in a separate condition, otherwise GCC complains
// about 'bitand' being an alternative token
#if defined(_MSC_VER) && !defined(__clang__)
#if defined(_MSC_VER)
#ifndef __GCCXML__
#if defined(bitand)
# pragma push_macro("bitand")
@@ -34,7 +34,7 @@
#define AUX778076_OP_TOKEN &
#include <boost/mpl/aux_/arithmetic_op.hpp>
#if defined(_MSC_VER) && !defined(__clang__)
#if defined(_MSC_VER)
#ifndef __GCCXML__
#if defined(bitand)
# pragma pop_macro("bitand")
+2 -2
View File
@@ -19,7 +19,7 @@
// macros, see http://tinyurl.com/ycwdxco; 'defined(bitor)'
// has to be checked in a separate condition, otherwise GCC complains
// about 'bitor' being an alternative token
#if defined(_MSC_VER) && !defined(__clang__)
#if defined(_MSC_VER)
#ifndef __GCCXML__
#if defined(bitor)
# pragma push_macro("bitor")
@@ -34,7 +34,7 @@
#define AUX778076_OP_TOKEN |
#include <boost/mpl/aux_/arithmetic_op.hpp>
#if defined(_MSC_VER) && !defined(__clang__)
#if defined(_MSC_VER)
#ifndef __GCCXML__
#if defined(bitor)
# pragma pop_macro("bitor")
+1 -1
View File
@@ -26,7 +26,7 @@ template< bool C_ > struct bool_
typedef integral_c_tag tag;
typedef bool_ type;
typedef bool value_type;
BOOST_CONSTEXPR operator bool() const { return this->value; }
operator bool() const { return this->value; }
};
#if !defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION)
+6 -10
View File
@@ -17,11 +17,12 @@
#include <boost/mpl/bool.hpp>
#include <boost/mpl/aux_/config/msvc.hpp>
#include <boost/mpl/aux_/config/workaround.hpp>
#include <boost/mpl/aux_/lambda_support.hpp>
#include <boost/type_traits/integral_constant.hpp>
#include <boost/type_traits/is_empty.hpp>
// should be always the last #include directive
#include <boost/type_traits/detail/bool_trait_def.hpp>
namespace boost { namespace mpl {
// empty base class, guaranteed to have no members; inheritance from
@@ -50,14 +51,9 @@ struct is_empty_base<empty_base>
}}
namespace boost {
template<> struct is_empty< mpl::empty_base >
: public ::boost::integral_constant<bool,true>
{
public:
BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,is_empty,(mpl::empty_base))
};
BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_empty, mpl::empty_base, true)
}
#include <boost/type_traits/detail/bool_trait_undef.hpp>
#endif // BOOST_MPL_EMPTY_BASE_HPP_INCLUDED
+1 -2
View File
@@ -23,8 +23,7 @@ namespace boost { namespace mpl {
struct empty_sequence
{
struct tag;
typedef empty_sequence type;
struct tag;
struct begin { typedef random_access_iterator_tag category; };
typedef begin end;
};
+3 -3
View File
@@ -4,8 +4,8 @@
// Copyright Aleksey Gurtovoy 2000-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// 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.
@@ -43,7 +43,7 @@ struct eval_if
BOOST_MPL_AUX_LAMBDA_SUPPORT(3,eval_if,(C,F1,F2))
};
// (almost) copy & paste in order to save one more
// (almost) copy & paste in order to save one more
// recursively nested template instantiation to user
template<
bool C
+1 -8
View File
@@ -22,7 +22,6 @@
#include <boost/mpl/deref.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/aux_/config/gpu.hpp>
#include <boost/mpl/aux_/unwrap.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -41,7 +40,6 @@ struct for_each_impl
, typename TransformFunc
, typename F
>
BOOST_MPL_CFG_GPU_ENABLED
static void execute(
Iterator*
, LastIterator*
@@ -61,7 +59,6 @@ struct for_each_impl<false>
, typename TransformFunc
, typename F
>
BOOST_MPL_CFG_GPU_ENABLED
static void execute(
Iterator*
, LastIterator*
@@ -92,7 +89,6 @@ template<
, typename TransformOp
, typename F
>
BOOST_MPL_CFG_GPU_ENABLED
inline
void for_each(F f, Sequence* = 0, TransformOp* = 0)
{
@@ -109,13 +105,10 @@ template<
typename Sequence
, typename F
>
BOOST_MPL_CFG_GPU_ENABLED
inline
void for_each(F f, Sequence* = 0)
{
// jfalcou: fully qualifying this call so it doesnt clash with phoenix::for_each
// ons ome compilers -- done on 02/28/2011
boost::mpl::for_each<Sequence, identity<> >(f);
for_each<Sequence, identity<> >(f);
}
}}
-26
View File
@@ -1,26 +0,0 @@
#ifndef BOOST_MPL_GET_TAG_HPP_INCLUDED
#define BOOST_MPL_GET_TAG_HPP_INCLUDED
// Copyright Sergey Krivonos 2017
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
#define BOOST_MPL_GET_TAG_DEF(TAG) \
namespace boost { namespace mpl { \
template<typename T> \
struct get_##TAG { \
typedef typename T::TAG type; \
}; \
}}
#endif
+2 -9
View File
@@ -155,11 +155,10 @@ template<> struct trait<T> \
// SFINAE-based implementations below are derived from a USENET newsgroup's
// posting by Rani Sharoni (comp.lang.c++.moderated, 2002-03-17 07:45:09 PST)
# elif BOOST_WORKAROUND(BOOST_MSVC, <= 1400) \
|| (BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1800)) && defined(__CUDACC__)) \
# elif BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
|| BOOST_WORKAROUND(__IBMCPP__, <= 700)
// MSVC 7.1 & MSVC 8.0 & VACPP
// MSVC 7.1+ & VACPP
// agurt, 15/jun/05: replace overload-based SFINAE implementation with SFINAE
// applied to partial specialization to fix some apparently random failures
@@ -291,24 +290,18 @@ struct trait \
# if !defined(BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES)
# if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
# define BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES 1
# else
# define BOOST_MPL_HAS_XXX_NO_WRAPPED_TYPES 0
# endif
# endif
# if !defined(BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION)
# if (defined(BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS))
# define BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION 1
# else
# define BOOST_MPL_HAS_XXX_NO_EXPLICIT_TEST_FUNCTION 0
# endif
# endif
# if !defined(BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE)
# if BOOST_WORKAROUND(BOOST_MSVC, <= 1400)
# define BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE 1
# else
# define BOOST_MPL_HAS_XXX_NEEDS_TEMPLATE_SFINAE 0
# endif
# endif
@@ -1,41 +0,0 @@
#ifndef BOOST_MPL_MAP_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
#define BOOST_MPL_MAP_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
// Copyright Bruno Dutra 2015
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
#include <boost/mpl/insert_range_fwd.hpp>
#include <boost/mpl/map/aux_/tag.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/insert.hpp>
namespace boost { namespace mpl {
template<>
struct insert_range_impl< aux::map_tag >
{
template<
typename Sequence
, typename /*Pos*/
, typename Range
>
struct apply
: fold<Range, Sequence, insert<_1, _2> >
{
};
};
}}
#endif // BOOST_MPL_MAP_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
-3
View File
@@ -40,7 +40,6 @@ struct m_item
typedef Key key_;
typedef pair<Key,T> item;
typedef Base base;
typedef m_item type;
typedef typename next< typename Base::size >::type size;
typedef typename next< typename Base::order >::type order;
@@ -63,7 +62,6 @@ struct m_mask
{
typedef void_ key_;
typedef Base base;
typedef m_mask type;
typedef typename prior< typename Base::size >::type size;
typedef typename x_order_impl<Base,Key>::type key_order_;
@@ -125,7 +123,6 @@ struct m_mask
{
typedef void_ key_;
typedef Base base;
typedef m_mask type;
typedef typename prior< typename Base::size >::type size;
typedef typename x_order_impl<Base,Key>::type key_order_;
-1
View File
@@ -19,7 +19,6 @@
#include <boost/mpl/map/aux_/at_impl.hpp>
//#include <boost/mpl/map/aux_/O1_size.hpp>
#include <boost/mpl/map/aux_/insert_impl.hpp>
#include <boost/mpl/map/aux_/insert_range_impl.hpp>
#include <boost/mpl/map/aux_/erase_impl.hpp>
#include <boost/mpl/map/aux_/erase_key_impl.hpp>
#include <boost/mpl/map/aux_/has_key_impl.hpp>
+2 -2
View File
@@ -29,7 +29,7 @@
// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(or)'
// has to be checked in a separate condition, otherwise GCC complains
// about 'or' being an alternative token
#if defined(_MSC_VER) && !defined(__clang__)
#if defined(_MSC_VER)
#ifndef __GCCXML__
#if defined(or)
# pragma push_macro("or")
@@ -42,7 +42,7 @@
# define BOOST_MPL_PREPROCESSED_HEADER or.hpp
# include <boost/mpl/aux_/include_preprocessed.hpp>
#if defined(_MSC_VER) && !defined(__clang__)
#if defined(_MSC_VER)
#ifndef __GCCXML__
#if defined(or)
# pragma pop_macro("or")
+3 -7
View File
@@ -37,7 +37,8 @@ namespace aux {
static const unsigned value = 1;
};
#endif
} // namespace aux
} // namespace aux
template <class T>
struct print
@@ -46,12 +47,7 @@ struct print
, aux::print_base
#endif
{
#if defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wc++11-extensions"
const int m_x = 1 / (sizeof(T) - sizeof(T));
# pragma clang diagnostic pop
#elif defined(BOOST_MSVC)
#if defined(BOOST_MSVC)
enum { n = sizeof(T) + -1 };
#elif defined(__MWERKS__)
void f(int);
@@ -1,41 +0,0 @@
#ifndef BOOST_MPL_SET_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
#define BOOST_MPL_SET_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
// Copyright Bruno Dutra 2015
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
#include <boost/mpl/insert_range_fwd.hpp>
#include <boost/mpl/set/aux_/tag.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/insert.hpp>
namespace boost { namespace mpl {
template<>
struct insert_range_impl< aux::set_tag >
{
template<
typename Sequence
, typename /*Pos*/
, typename Range
>
struct apply
: fold<Range, Sequence, insert<_1, _2> >
{
};
};
}}
#endif // BOOST_MPL_SET_AUX_INSERT_RANGE_IMPL_HPP_INCLUDED
+3 -5
View File
@@ -32,8 +32,7 @@ struct s_item
typedef s_item<T,Base> item_;
typedef void_ last_masked_;
typedef T item_type_;
typedef typename Base::item_ base;
typedef s_item type;
typedef Base base;
typedef typename next< typename Base::size >::type size;
typedef typename next< typename Base::order >::type order;
@@ -56,9 +55,8 @@ struct s_mask
typedef s_mask<T,Base> item_;
typedef T last_masked_;
typedef void_ item_type_;
typedef typename Base::item_ base;
typedef Base base;
typedef typename prior< typename Base::size >::type size;
typedef s_mask type;
BOOST_MPL_AUX_SET_OVERLOAD( aux::yes_tag, IS_MASKED, s_mask, aux::type_wrapper<T>* );
};
@@ -71,7 +69,7 @@ struct s_unmask
typedef s_unmask<T,Base> item_;
typedef void_ last_masked_;
typedef T item_type_;
typedef typename Base::item_ base;
typedef Base base;
typedef typename next< typename Base::size >::type size;
BOOST_MPL_AUX_SET_OVERLOAD( aux::no_tag, IS_MASKED, s_unmask, aux::type_wrapper<T>* );
-1
View File
@@ -21,7 +21,6 @@
#include <boost/mpl/set/aux_/size_impl.hpp>
#include <boost/mpl/set/aux_/empty_impl.hpp>
#include <boost/mpl/set/aux_/insert_impl.hpp>
#include <boost/mpl/set/aux_/insert_range_impl.hpp>
#include <boost/mpl/set/aux_/erase_impl.hpp>
#include <boost/mpl/set/aux_/erase_key_impl.hpp>
#include <boost/mpl/set/aux_/has_key_impl.hpp>
+2 -2
View File
@@ -19,7 +19,7 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
#include <boost/predef/other/endian.h>
#include <boost/detail/endian.hpp>
#include <boost/mpl/limits/string.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/char.hpp>
@@ -59,7 +59,7 @@ namespace boost { namespace mpl
#define BOOST_MPL_MULTICHAR_LENGTH(c) \
(std::size_t)((c<CHAR_MIN) ? 4 : ((c>0xffffff)+(c>0xffff)+(c>0xff)+1))
#if BOOST_ENDIAN_LITTLE_BYTE && defined(__SUNPRO_CC)
#if defined(BOOST_LITTLE_ENDIAN) && defined(__SUNPRO_CC)
#define BOOST_MPL_MULTICHAR_AT(c,i) \
(char)(0xff&((unsigned)(c)>>(8*(std::size_t)(i))))
-14
View File
@@ -1,14 +0,0 @@
{
"key": "mpl",
"name": "MPL",
"authors": [
"Aleksey Gurtovoy"
],
"description": "The Boost.MPL library is a general-purpose, high-level C++ template metaprogramming framework of compile-time algorithms, sequences and metafunctions. It provides a conceptual foundation and an extensive set of powerful and coherent tools that make doing explict metaprogramming in C++ as easy and enjoyable as possible within the current language.",
"category": [
"Metaprogramming"
],
"maintainers": [
"Aleksey Gurtovoy <agurtovoy -at- meta-comm.com>"
]
}
-70
View File
@@ -1,70 +0,0 @@
Pre-processing of MPL-containers
--------------------------------
Pre-processing of MPL-containers can be accomplished using the script
"boost_mpl_preprocess.py". In the simple case call it with a single
argument which is the path to the source-directory of Boost.
python boost_mpl_preprocess.py <path-to-boost-sourcedir>
If the Boost source-directory is the one this script resides in, you
can just call it without any arguments.
python boost_mpl_preprocess.py
Either way, this will pre-process all four MPL-container types (vector,
list, set, map) and makes them able to hold up to 100 elements. They can
be used either in their 'numbered' or their 'variadic' form.
Additionally, the script also allows more fine-grained pre-processing.
The maximal number of elements an MPL-container type is able to hold can
be different from the one of other MPL-container types and it can also
differ between its 'numbered' and 'variadic' form.
To see all options, call the script like this:
python boost_mpl_preprocess.py --help
Fixing pre-processing of MPL-containers
---------------------------------------
Sadly, pre-processing of MPL-containers might fail, if the source-files
used as input are missing some header-comments required during the pre-
processing step.
However, the script "boost_mpl_preprocess.py" makes sure to patch these
input source-files prior to pre-processing (by implicitly calling script
"fix_boost_mpl_preprocess.py" with the chosen settings). It only patches
the source-files needed for pre-processing the selected MPL-container
types and their selected form ('numbered' or 'variadic').
If calling it with a single (or no) argument (as in the former section)
all input source-files will be patched automatically.
Instead of fixing the input-files implicitly during pre-processing one
can also fix them explicitly by calling "fix_boost_mpl_preprocess.py"
directly.
If you just want to test if any fixing is needed call it like this:
python fix_boost_mpl_preprocess.py --check-only <path-to-boost-sourcedir>
This will tell you if any fixing is needed. In such a case call the script
"fix_boost_mpl_preprocess.py" like this:
python fix_boost_mpl_preprocess.py <path-to-boost-sourcedir>
This will fix the header-comments of all the source-files needed during
pre-processing. Calling "boost_mpl_preprocess.py" afterwards should then
successfully pre-process the MPL-containers (without the need of implicitly
fixing any files again).
Note:
Failure of pre-processing can be checked by examining at least one of the
following directories in which automatically generated files will be put
during pre-processing. If at least one file in these directories (or sub-
directories therein) has a size of zero bytes, fixing is needed.
<path-to-boost-sourcedir>/boost/mpl/vector/aux_/preprocessed/
<path-to-boost-sourcedir>/boost/mpl/list/aux_/preprocessed/
<path-to-boost-sourcedir>/boost/mpl/set/aux_/preprocessed/
<path-to-boost-sourcedir>/boost/mpl/map/aux_/preprocessed/
<path-to-boost-sourcedir>/boost/mpl/aux_/preprocessed/
-250
View File
@@ -1,250 +0,0 @@
# Copyright Deniz Bahadir 2015
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
#
# See http://www.boost.org/libs/mpl for documentation.
# See http://stackoverflow.com/a/20660264/3115457 for further information.
# See http://stackoverflow.com/a/29627158/3115457 for further information.
import fix_boost_mpl_preprocess as fixmpl
import argparse
import sys
import os
import os.path
import re
import fileinput
import shutil
def create_more_container_files(sourceDir, suffix, maxElements, containers, containers2):
"""Creates additional files for the individual MPL-containers."""
# Create files for each MPL-container with 20 to 'maxElements' elements
# which will be used during generation.
for container in containers:
for i in range(20, maxElements, 10):
# Create copy of "template"-file.
newFile = os.path.join( sourceDir, container, container + str(i+10) + suffix )
shutil.copyfile( os.path.join( sourceDir, container, container + "20" + suffix ), newFile )
# Adjust copy of "template"-file accordingly.
for line in fileinput.input( newFile, inplace=1, mode="rU" ):
line = re.sub(r'20', '%TWENTY%', line.rstrip())
line = re.sub(r'11', '%ELEVEN%', line.rstrip())
line = re.sub(r'10(?![0-9])', '%TEN%', line.rstrip())
line = re.sub(r'%TWENTY%', re.escape(str(i+10)), line.rstrip())
line = re.sub(r'%ELEVEN%', re.escape(str(i + 1)), line.rstrip())
line = re.sub(r'%TEN%', re.escape(str(i)), line.rstrip())
print(line)
for container in containers2:
for i in range(20, maxElements, 10):
# Create copy of "template"-file.
newFile = os.path.join( sourceDir, container, container + str(i+10) + "_c" + suffix )
shutil.copyfile( os.path.join( sourceDir, container, container + "20_c" + suffix ), newFile )
# Adjust copy of "template"-file accordingly.
for line in fileinput.input( newFile, inplace=1, mode="rU" ):
line = re.sub(r'20', '%TWENTY%', line.rstrip())
line = re.sub(r'11', '%ELEVEN%', line.rstrip())
line = re.sub(r'10(?![0-9])', '%TEN%', line.rstrip())
line = re.sub(r'%TWENTY%', re.escape(str(i+10)), line.rstrip())
line = re.sub(r'%ELEVEN%', re.escape(str(i + 1)), line.rstrip())
line = re.sub(r'%TEN%', re.escape(str(i)), line.rstrip())
print(line)
def create_input_for_numbered_sequences(headerDir, sourceDir, containers, maxElements):
"""Creates additional source- and header-files for the numbered sequence MPL-containers."""
# Create additional container-list without "map".
containersWithoutMap = containers[:]
try:
containersWithoutMap.remove('map')
except ValueError:
# We can safely ignore if "map" is not contained in 'containers'!
pass
# Create header/source-files.
create_more_container_files(headerDir, ".hpp", maxElements, containers, containersWithoutMap)
create_more_container_files(sourceDir, ".cpp", maxElements, containers, containersWithoutMap)
def adjust_container_limits_for_variadic_sequences(headerDir, containers, maxElements):
"""Adjusts the limits of variadic sequence MPL-containers."""
for container in containers:
headerFile = os.path.join( headerDir, "limits", container + ".hpp" )
regexMatch = r'(define\s+BOOST_MPL_LIMIT_' + container.upper() + r'_SIZE\s+)[0-9]+'
regexReplace = r'\g<1>' + re.escape( str(maxElements) )
for line in fileinput.input( headerFile, inplace=1, mode="rU" ):
line = re.sub(regexMatch, regexReplace, line.rstrip())
print(line)
def current_boost_dir():
"""Returns the (relative) path to the Boost source-directory this file is located in (if any)."""
# Path to directory containing this script.
path = os.path.dirname( os.path.realpath(__file__) )
# Making sure it is located in "${boost-dir}/libs/mpl/preprocessed".
for directory in reversed( ["libs", "mpl", "preprocessed"] ):
(head, tail) = os.path.split(path)
if tail == directory:
path = head
else:
return None
return os.path.relpath( path )
def to_positive_multiple_of_10(string):
"""Converts a string into its encoded positive integer (greater zero) or throws an exception."""
try:
value = int(string)
except ValueError:
msg = '"%r" is not a positive multiple of 10 (greater zero).' % string
raise argparse.ArgumentTypeError(msg)
if value <= 0 or value % 10 != 0:
msg = '"%r" is not a positive multiple of 10 (greater zero).' % string
raise argparse.ArgumentTypeError(msg)
return value
def to_existing_absolute_path(string):
"""Converts a path into its absolute path and verifies that it exists or throws an exception."""
value = os.path.abspath(string)
if not os.path.exists( value ) or not os.path.isdir( value ):
msg = '"%r" is not a valid path to a directory.' % string
raise argparse.ArgumentTypeError(msg)
return value
def main():
"""The main function."""
# Find the current Boost source-directory in which this script is located.
sourceDir = current_boost_dir()
if sourceDir == None:
sourceDir = ""
# Prepare and run cmdline-parser.
cmdlineParser = argparse.ArgumentParser(description="A generator-script for pre-processed Boost.MPL headers.")
cmdlineParser.add_argument("-v", "--verbose", dest='verbose', action='store_true',
help="Be a little bit more verbose.")
cmdlineParser.add_argument("-s", "--sequence-type", dest='seqType', choices=['variadic', 'numbered', 'both'],
default='both',
help="Only update pre-processed headers for the selected sequence types, "
"either 'numbered' sequences, 'variadic' sequences or 'both' sequence "
"types. (Default=both)")
cmdlineParser.add_argument("--no-vector", dest='want_vector', action='store_false',
help="Do not update pre-processed headers for Boost.MPL Vector.")
cmdlineParser.add_argument("--no-list", dest='want_list', action='store_false',
help="Do not update pre-processed headers for Boost.MPL List.")
cmdlineParser.add_argument("--no-set", dest='want_set', action='store_false',
help="Do not update pre-processed headers for Boost.MPL Set.")
cmdlineParser.add_argument("--no-map", dest='want_map', action='store_false',
help="Do not update pre-processed headers for Boost.MPL Map.")
cmdlineParser.add_argument("--num-elements", dest='numElements', metavar="<num-elements>",
type=to_positive_multiple_of_10, default=100,
help="The maximal number of elements per container sequence. (Default=100)")
cmdlineParser.add_argument(dest='sourceDir', metavar="<source-dir>", default=current_boost_dir(), nargs='?',
type=to_existing_absolute_path,
help="The source-directory of Boost. (Default=\"" + sourceDir + "\")")
args = cmdlineParser.parse_args()
# Some verbose debug output.
if args.verbose:
print "Arguments extracted from command-line:"
print " verbose = ", args.verbose
print " source directory = ", args.sourceDir
print " num elements = ", args.numElements
print " sequence type = ", args.seqType
print " want: vector = ", args.want_vector
print " want: list = ", args.want_list
print " want: set = ", args.want_set
print " want: map = ", args.want_map
# Verify that we received any source-directory.
if args.sourceDir == None:
print "You should specify a valid path to the Boost source-directory."
sys.exit(0)
# The directories for header- and source files of Boost.MPL.
# NOTE: Assuming 'args.sourceDir' is the source-directory of the entire boost project.
headerDir = os.path.join( args.sourceDir, "boost", "mpl" )
sourceDir = os.path.join( args.sourceDir, "libs", "mpl", "preprocessed" )
# Check that the header/source-directories exist.
if not os.path.exists( headerDir ) or not os.path.exists( sourceDir ):
# Maybe 'args.sourceDir' is not the source-directory of the entire boost project
# but instead of the Boost.MPL git-directory, only?
headerDir = os.path.join( args.sourceDir, "include", "boost", "mpl" )
sourceDir = os.path.join( args.sourceDir, "preprocessed" )
if not os.path.exists( headerDir ) or not os.path.exists( sourceDir ):
cmdlineParser.print_usage()
print "error: Cannot find Boost.MPL header/source files in given Boost source-directory!"
sys.exit(0)
# Some verbose debug output.
if args.verbose:
print "Chosen header-directory: ", headerDir
print "Chosen source-directory: ", sourceDir
# Create list of containers for which files shall be pre-processed.
containers = []
if args.want_vector:
containers.append('vector')
if args.want_list:
containers.append('list')
if args.want_set:
containers.append('set')
if args.want_map:
containers.append('map')
if containers == []:
print "Nothing to do."
print "(Why did you prevent generating pre-processed headers for all Boost.MPL container types?)"
sys.exit(0)
# Possibly fix the header-comments of input-files needed for pre-processing.
if args.verbose:
print "Checking if prior to pre-processing some input-files need fixing."
needFixing = fixmpl.check_input_files(headerDir, sourceDir, containers, args.seqType, args.verbose)
if needFixing:
if args.verbose:
print "Fixing of some input-files prior to pre-processing is needed."
print "Will fix them now!"
fixmpl.fix_input_files(headerDir, sourceDir, containers, args.seqType, args.verbose)
# Some verbose debug output.
if args.verbose:
print "Containers for which to pre-process headers: ", containers
# Create (additional) input files for generating pre-processed headers of numbered sequence MPL containers.
if args.seqType == "both" or args.seqType == "numbered":
create_input_for_numbered_sequences(headerDir, sourceDir, containers, args.numElements)
# Modify settings for generating pre-processed headers of variadic sequence MPL containers.
if args.seqType == "both" or args.seqType == "variadic":
adjust_container_limits_for_variadic_sequences(headerDir, containers, args.numElements)
# Generate MPL-preprocessed files.
os.chdir( sourceDir )
if args.seqType == "both" or args.seqType == "numbered":
if args.want_vector:
if args.verbose:
print "Pre-process headers for Boost.MPL numbered vectors."
os.system( "python " + os.path.join( sourceDir, "preprocess_vector.py" ) + " all " + args.sourceDir )
if args.want_list:
if args.verbose:
print "Pre-process headers for Boost.MPL numbered lists."
os.system( "python " + os.path.join( sourceDir, "preprocess_list.py" ) + " all " + args.sourceDir )
if args.want_set:
if args.verbose:
print "Pre-process headers for Boost.MPL numbered sets."
os.system( "python " + os.path.join( sourceDir, "preprocess_set.py" ) + " all " + args.sourceDir )
if args.want_map:
if args.verbose:
print "Pre-process headers for Boost.MPL numbered maps."
os.system( "python " + os.path.join( sourceDir, "preprocess_map.py" ) + " all " + args.sourceDir )
if args.seqType == "both" or args.seqType == "variadic":
if args.verbose:
print "Pre-process headers for Boost.MPL variadic containers."
os.system( "python " + os.path.join( sourceDir, "preprocess.py" ) + " all " + args.sourceDir )
if __name__ == '__main__':
main()
-205
View File
@@ -1,205 +0,0 @@
# Copyright Deniz Bahadir 2015
#
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
#
# See http://www.boost.org/libs/mpl for documentation.
# See http://stackoverflow.com/a/29627158/3115457 for further information.
import argparse
import sys
import os.path
import re
import fileinput
import datetime
import glob
def check_header_comment(filename):
"""Checks if the header-comment of the given file needs fixing."""
# Check input file.
name = os.path.basename( filename )
# Read content of input file.
sourcefile = open( filename, "rU" )
content = sourcefile.read()
sourcefile.close()
# Search content for '$Id$'.
match = re.search(r'\$Id\$', content)
if match == None:
# Make sure that the correct value for '$Id$' was already set.
match = re.search(r'\$Id: ' + name + r'\s+[^$]+\$', content)
if match != None:
# The given file needs no fixing.
return False
# The given file needs fixing.
return True
def check_input_files_for_variadic_seq(headerDir, sourceDir):
"""Checks if files, used as input when pre-processing MPL-containers in their variadic form, need fixing."""
# Check input files in include/source-directories.
files = glob.glob( os.path.join( headerDir, "*.hpp" ) )
files += glob.glob( os.path.join( headerDir, "aux_", "*.hpp" ) )
files += glob.glob( os.path.join( sourceDir, "src", "*" ) )
for currentFile in sorted( files ):
if check_header_comment( currentFile ):
return True
return False
def check_input_files_for_numbered_seq(sourceDir, suffix, containers):
"""Check if files, used as input when pre-processing MPL-containers in their numbered form, need fixing."""
# Check input files for each MPL-container type.
for container in containers:
files = glob.glob( os.path.join( sourceDir, container, container + '*' + suffix ) )
for currentFile in sorted( files ):
if check_header_comment( currentFile ):
return True
return False
def check_input_files(headerDir, sourceDir, containers=['vector', 'list', 'set', 'map'],
seqType='both', verbose=False):
"""Checks if source- and header-files, used as input when pre-processing MPL-containers, need fixing."""
# Check the input files for containers in their variadic form.
result1 = False
if seqType == "both" or seqType == "variadic":
if verbose:
print "Check if input files for pre-processing Boost.MPL variadic containers need fixing."
result1 = check_input_files_for_variadic_seq(headerDir, sourceDir)
if verbose:
if result1:
print " At least one input file needs fixing!"
else:
print " No input file needs fixing!"
# Check the input files for containers in their numbered form.
result2 = False
result3 = False
if seqType == "both" or seqType == "numbered":
if verbose:
print "Check input files for pre-processing Boost.MPL numbered containers."
result2 = check_input_files_for_numbered_seq(headerDir, ".hpp", containers)
result3 = check_input_files_for_numbered_seq(sourceDir, ".cpp", containers)
if verbose:
if result2 or result3:
print " At least one input file needs fixing!"
else:
print " No input file needs fixing!"
# Return result.
return result1 or result2 or result3
def fix_header_comment(filename, timestamp):
"""Fixes the header-comment of the given file."""
# Fix input file.
name = os.path.basename( filename )
for line in fileinput.input( filename, inplace=1, mode="rU" ):
# If header-comment already contains anything for '$Id$', remove it.
line = re.sub(r'\$Id:[^$]+\$', r'$Id$', line.rstrip())
# Replace '$Id$' by a string containing the file's name (and a timestamp)!
line = re.sub(re.escape(r'$Id$'), r'$Id: ' + name + r' ' + timestamp.isoformat() + r' $', line.rstrip())
print(line)
def fix_input_files_for_variadic_seq(headerDir, sourceDir, timestamp):
"""Fixes files used as input when pre-processing MPL-containers in their variadic form."""
# Fix files in include/source-directories.
files = glob.glob( os.path.join( headerDir, "*.hpp" ) )
files += glob.glob( os.path.join( headerDir, "aux_", "*.hpp" ) )
files += glob.glob( os.path.join( sourceDir, "src", "*" ) )
for currentFile in sorted( files ):
fix_header_comment( currentFile, timestamp )
def fix_input_files_for_numbered_seq(sourceDir, suffix, timestamp, containers):
"""Fixes files used as input when pre-processing MPL-containers in their numbered form."""
# Fix input files for each MPL-container type.
for container in containers:
files = glob.glob( os.path.join( sourceDir, container, container + '*' + suffix ) )
for currentFile in sorted( files ):
fix_header_comment( currentFile, timestamp )
def fix_input_files(headerDir, sourceDir, containers=['vector', 'list', 'set', 'map'],
seqType='both', verbose=False):
"""Fixes source- and header-files used as input when pre-processing MPL-containers."""
# The new modification time.
timestamp = datetime.datetime.now();
# Fix the input files for containers in their variadic form.
if seqType == "both" or seqType == "variadic":
if verbose:
print "Fix input files for pre-processing Boost.MPL variadic containers."
fix_input_files_for_variadic_seq(headerDir, sourceDir, timestamp)
# Fix the input files for containers in their numbered form.
if seqType == "both" or seqType == "numbered":
if verbose:
print "Fix input files for pre-processing Boost.MPL numbered containers."
fix_input_files_for_numbered_seq(headerDir, ".hpp", timestamp, containers)
fix_input_files_for_numbered_seq(sourceDir, ".cpp", timestamp, containers)
def to_existing_absolute_path(string):
"""Converts a path into its absolute path and verifies that it exists or throws an exception."""
value = os.path.abspath(string)
if not os.path.exists( value ) or not os.path.isdir( value ):
msg = '"%r" is not a valid path to a directory.' % string
raise argparse.ArgumentTypeError(msg)
return value
def main():
"""The main function."""
# Prepare and run cmdline-parser.
cmdlineParser = argparse.ArgumentParser(
description="Fixes the input files used for pre-processing of Boost.MPL headers.")
cmdlineParser.add_argument("-v", "--verbose", dest='verbose', action='store_true',
help="Be a little bit more verbose.")
cmdlineParser.add_argument("--check-only", dest='checkonly', action='store_true',
help="Only checks if fixing is required.")
cmdlineParser.add_argument(dest='sourceDir', metavar="<source-dir>",
type=to_existing_absolute_path,
help="The source-directory of Boost.")
args = cmdlineParser.parse_args()
# Some verbose debug output.
if args.verbose:
print "Arguments extracted from command-line:"
print " verbose = ", args.verbose
print " check-only = ", args.checkonly
print " source directory = ", args.sourceDir
# The directories for header- and source files of Boost.MPL.
# NOTE: Assuming 'args.sourceDir' is the source-directory of the entire boost project.
headerDir = os.path.join( args.sourceDir, "boost", "mpl" )
sourceDir = os.path.join( args.sourceDir, "libs", "mpl", "preprocessed" )
# Check that the header/source-directories exist.
if not os.path.exists( headerDir ) or not os.path.exists( sourceDir ):
# Maybe 'args.sourceDir' is not the source-directory of the entire boost project
# but instead of the Boost.MPL git-directory, only?
headerDir = os.path.join( args.sourceDir, "include", "boost", "mpl" )
sourceDir = os.path.join( args.sourceDir, "preprocessed" )
if not os.path.exists( headerDir ) or not os.path.exists( sourceDir ):
cmdlineParser.print_usage()
print "error: Cannot find Boost.MPL header/source files in given Boost source-directory!"
sys.exit(0)
# Some verbose debug output.
if args.verbose:
print "Chosen header-directory: ", headerDir
print "Chosen source-directory: ", sourceDir
if args.checkonly:
# Check input files for generating pre-processed headers.
result = check_input_files(headerDir, sourceDir, verbose = args.verbose)
if result:
print "Fixing the input-files used for pre-processing of Boost.MPL headers IS required."
else:
print "Fixing the input-files used for pre-processing of Boost.MPL headers is NOT required."
else:
# Fix input files for generating pre-processed headers.
fix_input_files(headerDir, sourceDir, verbose = args.verbose)
if __name__ == '__main__':
main()
+26
View File
@@ -0,0 +1,26 @@
// Copyright Aleksey Gurtovoy 2003-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
#define BOOST_NO_CONFIG
#define BOOST_MSVC 1200
#define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
#define BOOST_NO_TEMPLATE_TEMPLATES
#define BOOST_NO_CV_VOID_SPECIALIZATIONS
#define BOOST_NO_INTRINSIC_WCHAR_T
#define BOOST_NO_STD_ALLOCATOR
#define BOOST_MPL_CFG_NO_BIND_TEMPLATE
#define BOOST_MPL_CFG_NO_APPLY_TEMPLATE
#define BOOST_MPL_CFG_MSVC_60_ETI_BUG
#define BOOST_MPL_CFG_MSVC_ETI_BUG
#define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC
+21
View File
@@ -0,0 +1,21 @@
// Copyright Aleksey Gurtovoy 2003-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
#define BOOST_NO_CONFIG
#define BOOST_MSVC 1300
#define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#define BOOST_NO_INCLASS_MEMBER_INITIALIZATION
#define BOOST_MPL_CFG_NO_BIND_TEMPLATE
#define BOOST_MPL_CFG_NO_APPLY_TEMPLATE
#define BOOST_MPL_CFG_MSVC_ETI_BUG
#define BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC
+15
View File
@@ -0,0 +1,15 @@
// Copyright Aleksey Gurtovoy 2003-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
#define BOOST_NO_CONFIG
#define BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+1 -1
View File
@@ -82,7 +82,7 @@ def main( all_modes, src_dir, dst_dir ):
if __name__ == '__main__':
main(
["bcc", "bcc551", "gcc", "mwcw", "dmc", "no_ttp", "plain"]
["bcc", "bcc551", "gcc", "msvc60", "msvc70", "mwcw", "dmc", "no_ctps", "no_ttp", "plain"]
, "src"
, os.path.join( "boost", "mpl", "aux_", "preprocessed" )
)
+1 -1
View File
@@ -15,7 +15,7 @@ import preprocess
import os.path
preprocess.main(
[ "plain", "typeof_based" ]
[ "plain", "typeof_based", "no_ctps" ]
, "map"
, os.path.join( "boost", "mpl", "map", "aux_", "preprocessed" )
)
+1 -1
View File
@@ -15,7 +15,7 @@ import preprocess
import os.path
preprocess.main(
[ "plain", "typeof_based" ]
[ "no_ctps", "plain", "typeof_based" ]
, "vector"
, os.path.join( "boost", "mpl", "vector", "aux_", "preprocessed" )
)
-2
View File
@@ -1,5 +1,4 @@
compile aux_/increased_arity.cpp ;
compile aux_/largest_int.cpp ;
compile aux_/msvc_is_class.cpp ;
compile aux_/template_arity.cpp ;
@@ -37,7 +36,6 @@ compile find_if.cpp ;
compile fold.cpp ;
run for_each.cpp ;
compile front.cpp ;
compile get_tag_def.cpp ;
compile has_xxx.cpp ;
compile identity.cpp ;
compile if.cpp ;
+3 -9
View File
@@ -1,8 +1,8 @@
// Copyright Aleksey Gurtovoy 2000-2004
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// 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.
@@ -22,8 +22,6 @@ MPL_TEST_CASE()
{
typedef always<true_> always_true;
MPL_ASSERT(( apply< always_true > ));
MPL_ASSERT(( apply0< always_true > ));
MPL_ASSERT(( apply1< always_true,false_ > ));
MPL_ASSERT(( apply2< always_true,false_,false_ > ));
MPL_ASSERT(( apply3< always_true,false_,false_,false_ > ));
@@ -32,16 +30,12 @@ MPL_TEST_CASE()
MPL_TEST_CASE()
{
typedef always< int_<10> > always_10;
typedef always< int_<10> > always_10;
typedef apply< always_10 >::type res;
typedef apply0< always_10 >::type res0;
typedef apply1< always_10,int_<0> >::type res1;
typedef apply2< always_10,int_<0>,int_<0> >::type res2;
typedef apply3< always_10,int_<0>,int_<0>,int_<0> >::type res3;
MPL_ASSERT_RELATION( res::value, ==, 10 );
MPL_ASSERT_RELATION( res0::value, ==, 10 );
MPL_ASSERT_RELATION( res1::value, ==, 10 );
MPL_ASSERT_RELATION( res2::value, ==, 10 );
MPL_ASSERT_RELATION( res3::value, ==, 10 );
+2 -2
View File
@@ -76,7 +76,7 @@ MPL_TEST_CASE()
typedef apply1< _1, std_vector<_1> >::type v_lambda;
typedef apply1<v_lambda,int>::type v_int;
MPL_ASSERT(( is_same< v_int,std_vector<int> > ));
MPL_ASSERT(( is_same< v,std_vector<int> > ));
}
MPL_TEST_CASE()
@@ -86,7 +86,7 @@ MPL_TEST_CASE()
typedef apply1< lambda<_1>, std_vector<_1> >::type make_vector;
typedef apply_wrap1< make_vector,int >::type v_int;
MPL_ASSERT(( is_same< v_int,std_vector<int> > ));
MPL_ASSERT(( is_same< v,std_vector<int> > ));
}
MPL_TEST_CASE()
-11
View File
@@ -71,17 +71,6 @@ struct her
}
};
template<class T>
struct nested : boost::mpl::true_ {
BOOST_MPL_ASSERT(( boost::is_pointer<T*> ));
BOOST_MPL_ASSERT_NOT(( boost::is_same<void,T> ));
BOOST_MPL_ASSERT_RELATION( sizeof(T*), >, 1 );
BOOST_MPL_ASSERT_MSG( true, GLOBAL_SCOPE_ERROR, (int,long) );
};
BOOST_MPL_ASSERT(( nested<int> ));
BOOST_MPL_ASSERT_NOT(( boost::mpl::not_<nested<unsigned> > ));
int main()
{
her<void> h;
-50
View File
@@ -1,50 +0,0 @@
// Copyright Bruno Dutra 2015
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/mpl for documentation.
// $Id$
// $Date$
// $Revision$
#define BOOST_MPL_LIMIT_METAFUNCTION_ARITY 15
#define BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
#include <boost/mpl/logical.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/apply.hpp>
#include <boost/mpl/aux_/test.hpp>
#include <boost/preprocessor/inc.hpp>
#include <boost/preprocessor/repeat_from_to.hpp>
#include <boost/preprocessor/enum_params.hpp>
#include <boost/preprocessor/facilities/intercept.hpp>
#define TEST_N_ARY(unused1, N, unused2) \
static_assert_< \
apply< \
and_<BOOST_PP_ENUM_PARAMS(N, _ BOOST_PP_INTERCEPT)>, \
BOOST_PP_ENUM_PARAMS(N, true_ BOOST_PP_INTERCEPT) \
> \
>(); \
/**/
template<typename assertion>
void static_assert_(){
MPL_ASSERT((typename assertion::type));
}
MPL_TEST_CASE()
{
BOOST_PP_REPEAT_FROM_TO(
2,
BOOST_PP_INC(BOOST_MPL_LIMIT_METAFUNCTION_ARITY),
TEST_N_ARY,
_
)
}
+6 -6
View File
@@ -37,9 +37,9 @@ MPL_TEST_CASE()
MPL_ASSERT_RELATION( (bitor_<_0,_0>::value), ==, 0 );
MPL_ASSERT_RELATION( (bitor_<_1,_0>::value), ==, 1 );
MPL_ASSERT_RELATION( (bitor_<_0,_1>::value), ==, 1 );
MPL_ASSERT_RELATION( static_cast<long>(bitor_<_0,_ffffffff>::value), ==, static_cast<long>(0xffffffff) );
MPL_ASSERT_RELATION( static_cast<long>(bitor_<_1,_ffffffff>::value), ==, static_cast<long>(0xffffffff) );
MPL_ASSERT_RELATION( static_cast<long>(bitor_<_8,_ffffffff>::value), ==, static_cast<long>(0xffffffff) );
MPL_ASSERT_RELATION( (bitor_<_0,_ffffffff>::value), ==, 0xffffffff );
MPL_ASSERT_RELATION( (bitor_<_1,_ffffffff>::value), ==, 0xffffffff );
MPL_ASSERT_RELATION( (bitor_<_8,_ffffffff>::value), ==, 0xffffffff );
}
MPL_TEST_CASE()
@@ -47,9 +47,9 @@ MPL_TEST_CASE()
MPL_ASSERT_RELATION( (bitxor_<_0,_0>::value), ==, 0 );
MPL_ASSERT_RELATION( (bitxor_<_1,_0>::value), ==, 1 );
MPL_ASSERT_RELATION( (bitxor_<_0,_1>::value), ==, 1 );
MPL_ASSERT_RELATION( static_cast<long>(bitxor_<_0,_ffffffff>::value), ==, static_cast<long>(0xffffffff ^ 0) );
MPL_ASSERT_RELATION( static_cast<long>(bitxor_<_1,_ffffffff>::value), ==, static_cast<long>(0xffffffff ^ 1) );
MPL_ASSERT_RELATION( static_cast<long>(bitxor_<_8,_ffffffff>::value), ==, static_cast<long>(0xffffffff ^ 8) );
MPL_ASSERT_RELATION( (bitxor_<_0,_ffffffff>::value), ==, (0xffffffff ^ 0) );
MPL_ASSERT_RELATION( (bitxor_<_1,_ffffffff>::value), ==, (0xffffffff ^ 1) );
MPL_ASSERT_RELATION( (bitxor_<_8,_ffffffff>::value), ==, (0xffffffff ^ 8) );
}
MPL_TEST_CASE()
-7
View File
@@ -16,18 +16,11 @@
#include <cassert>
#if defined(BOOST_NO_CXX11_CONSTEXPR)
#define CONSTEXPR_BOOL_TEST(c)
#else
#define CONSTEXPR_BOOL_TEST(c) { static_assert(bool_<c>() == c, "Constexpr for bool_ failed"); }
#endif
#define BOOL_TEST(c) \
{ MPL_ASSERT(( is_same< bool_<c>::value_type, bool > )); } \
{ MPL_ASSERT(( is_same< bool_<c>, c##_ > )); } \
{ MPL_ASSERT(( is_same< bool_<c>::type, bool_<c> > )); } \
{ MPL_ASSERT_RELATION( bool_<c>::value, ==, c ); } \
CONSTEXPR_BOOL_TEST(c) \
BOOST_TEST( bool_<c>() == c ); \
/**/
-3
View File
@@ -17,7 +17,6 @@
#include <boost/mpl/distance.hpp>
#include <boost/mpl/advance.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/mpl/aux_/test.hpp>
#include <boost/type_traits/is_same.hpp>
@@ -34,6 +33,4 @@ MPL_TEST_CASE()
typedef advance_c<begin,0>::type advanced;
MPL_ASSERT(( is_same<advanced,end> ));
MPL_ASSERT(( equal< empty_sequence, empty_sequence::type > ));
}
-5
View File
@@ -18,7 +18,6 @@
#include <boost/mpl/list.hpp>
#include <boost/mpl/sizeof.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/mpl/aux_/test.hpp>
#include <boost/type_traits/is_float.hpp>
@@ -27,10 +26,6 @@
MPL_TEST_CASE()
{
typedef mpl::list<int,float,long,float,char[50],long double,char> types;
typedef mpl::list<float,float,long double> floats;
MPL_ASSERT(( equal< mpl::filter_view< types,boost::is_float<_> >::type,floats > ));
typedef mpl::max_element<
mpl::transform_view<
mpl::filter_view< types,boost::is_float<_> >
-32
View File
@@ -1,32 +0,0 @@
// Copyright Sergey Krivonos 2017
//
// 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/get_tag.hpp>
#include <boost/mpl/aux_/test.hpp>
#include <boost/mpl/aux_/test/assert.hpp>
#include <boost/type_traits/is_same.hpp>
struct test_type_get_tag_def
{
typedef int a_tag;
};
BOOST_MPL_GET_TAG_DEF(a_tag);
MPL_TEST_CASE()
{
MPL_ASSERT(( is_same<int, boost::mpl::get_a_tag<test_type_get_tag_def>::type> ));
MPL_ASSERT(( is_same<test_type_get_tag_def::a_tag, boost::mpl::get_a_tag<test_type_get_tag_def>::type> ));
}
-38
View File
@@ -15,17 +15,9 @@
#include <boost/mpl/find.hpp>
#include <boost/mpl/vector_c.hpp>
#include <boost/mpl/list.hpp>
#include <boost/mpl/set.hpp>
#include <boost/mpl/set_c.hpp>
#include <boost/mpl/map.hpp>
#include <boost/mpl/size.hpp>
#include <boost/mpl/range_c.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/logical.hpp>
#include <boost/mpl/contains.hpp>
#include <boost/mpl/joint_view.hpp>
#include <boost/mpl/aux_/test.hpp>
@@ -41,33 +33,3 @@ MPL_TEST_CASE()
typedef insert_range< list0<>,end< list0<> >::type,list1<int> >::type result2;
MPL_ASSERT_RELATION( size<result2>::value, ==, 1 );
}
template<typename A, typename B>
void test_associative()
{
typedef typename insert_range< A,typename end< A >::type,B >::type C;
MPL_ASSERT_RELATION( size<C>::value, <=, (size<A>::value + size<B>::value) );
MPL_ASSERT(( fold< joint_view< A,B >,true_,and_< _1,contains< C,_2 > > > ));
}
MPL_TEST_CASE()
{
typedef set3< short,int,long > signed_integers;
typedef set3< unsigned short,unsigned int,unsigned long > unsigned_integers;
test_associative<signed_integers, unsigned_integers>();
typedef set_c< int,1,3,5,7,9 > odds;
typedef set_c< int,0,2,4,6,8 > evens;
test_associative<odds, evens>();
typedef map2<
pair< void,void* >
, pair< int,int* >
> pointers;
typedef map2<
pair< void const,void const* >
, pair< int const,int const* >
> pointers_to_const;
test_associative<pointers, pointers_to_const>();
}
-8
View File
@@ -28,12 +28,6 @@
/**/
#endif
#if defined(BOOST_NO_CXX11_CONSTEXPR)
#define CONSTEXPR_INTEGRAL_TEST(T, i)
#else
#define CONSTEXPR_INTEGRAL_TEST(T, i) { static_assert(T() == i, "Constexpr for integral constant failed"); }
#endif
#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x582))
// agurt 20/nov/06: see http://article.gmane.org/gmane.comp.lib.boost.devel/151065
#define INTEGRAL_WRAPPER_TEST(unused1, i, T) \
@@ -45,7 +39,6 @@
{ MPL_ASSERT(( is_same< next< borland_tested_type >::type, WRAPPER(T,i+1) > )); } \
{ MPL_ASSERT(( is_same< prior< borland_tested_type >::type, WRAPPER(T,i-1) > )); } \
{ MPL_ASSERT_RELATION( (borland_tested_type::value), ==, i ); } \
CONSTEXPR_INTEGRAL_TEST(borland_tested_type, i) \
INTEGRAL_WRAPPER_RUNTIME_TEST(i, T) \
} \
/**/
@@ -56,7 +49,6 @@
{ MPL_ASSERT(( is_same< next< WRAPPER(T,i) >::type, WRAPPER(T,i+1) > )); } \
{ MPL_ASSERT(( is_same< prior< WRAPPER(T,i) >::type, WRAPPER(T,i-1) > )); } \
{ MPL_ASSERT_RELATION( (WRAPPER(T,i)::value), ==, i ); } \
CONSTEXPR_INTEGRAL_TEST(WRAPPER(T,i), i) \
INTEGRAL_WRAPPER_RUNTIME_TEST(i, T) \
/**/
#endif
-1
View File
@@ -30,7 +30,6 @@ MPL_TEST_CASE()
typedef range_c<int,0,15> answer;
MPL_ASSERT(( equal<numbers,answer> ));
MPL_ASSERT(( equal<numbers::type,answer> ));
MPL_ASSERT_RELATION( size<numbers>::value, ==, 15 );
}
-16
View File
@@ -217,19 +217,3 @@ MPL_TEST_CASE()
>
));
}
MPL_TEST_CASE()
{
typedef insert< map<>, pair<int,int> >::type little_map;
MPL_ASSERT_RELATION(size<little_map>::value, ==, 1);
MPL_ASSERT_RELATION(size<little_map::type>::value, ==, 1);
}
MPL_TEST_CASE()
{
typedef erase_key< map< pair<float,float>, pair<int,int> >, float >::type little_map;
MPL_ASSERT_RELATION(size<little_map>::value, ==, 1);
MPL_ASSERT_RELATION(size<little_map::type>::value, ==, 1);
}
-16
View File
@@ -329,19 +329,3 @@ MPL_TEST_CASE()
find_test<s>();
find_test<s::type>();
}
MPL_TEST_CASE()
{
typedef insert< set<>, int >::type little_set;
MPL_ASSERT_RELATION(size<little_set>::value, ==, 1);
MPL_ASSERT_RELATION(size<little_set::type>::value, ==, 1);
}
MPL_TEST_CASE()
{
typedef erase_key< set< float, int >, float >::type little_set;
MPL_ASSERT_RELATION(size<little_set>::value, ==, 1);
MPL_ASSERT_RELATION(size<little_set::type>::value, ==, 1);
}
-21
View File
@@ -14,7 +14,6 @@
#include <boost/mpl/set_c.hpp>
#include <boost/mpl/at.hpp>
#include <boost/mpl/size.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/aux_/test.hpp>
@@ -60,18 +59,6 @@ MPL_TEST_CASE()
MPL_ASSERT(( is_same< test::at_c<s1,false>::type, void_ > ));
MPL_ASSERT(( is_same< test::at_c<s2,true>::type, void_ > ));
#endif
typedef begin<s1>::type first1;
typedef end<s1>::type last1;
MPL_ASSERT_RELATION( (distance<first1, last1>::value), ==, 1 );
typedef begin<s2>::type first2;
typedef end<s2>::type last2;
MPL_ASSERT_RELATION( (distance<first2, last2>::value), ==, 1 );
typedef begin<s3>::type first3;
typedef end<s3>::type last3;
MPL_ASSERT_RELATION( (distance<first3, last3>::value), ==, 2 );
}
#endif
@@ -95,12 +82,4 @@ MPL_TEST_CASE()
MPL_ASSERT(( is_same< test::at_c<s1,'z'>::type, void_ > ));
MPL_ASSERT(( is_same< test::at_c<s2,'k'>::type, void_ > ));
#endif
typedef begin<s1>::type first1;
typedef end<s1>::type last1;
MPL_ASSERT_RELATION( (distance<first1, last1>::value), ==, 1 );
typedef begin<s2>::type first2;
typedef end<s2>::type last2;
MPL_ASSERT_RELATION( (distance<first2, last2>::value), ==, 8 );
}
-3
View File
@@ -15,7 +15,6 @@
#include <boost/mpl/advance.hpp>
#include <boost/mpl/size.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/mpl/aux_/test.hpp>
MPL_TEST_CASE()
@@ -38,6 +37,4 @@ MPL_TEST_CASE()
MPL_ASSERT_RELATION( (mpl::distance<last,last>::value), ==, 0 );
MPL_ASSERT_RELATION( size<view>::value, ==, 1 );
MPL_ASSERT(( equal< view, view::type > ));
}
+1 -11
View File
@@ -16,22 +16,12 @@
#include <boost/mpl/max_element.hpp>
#include <boost/mpl/list.hpp>
#include <boost/mpl/sizeof.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/mpl/aux_/test.hpp>
MPL_TEST_CASE()
{
typedef list<int,long,char,char[50],double> types;
typedef list<
sizeof_<int>::type,
sizeof_<long>::type,
sizeof_<char>::type,
sizeof_<char[50]>::type,
sizeof_<double>::type
> sizes;
MPL_ASSERT(( equal< transform_view< types, sizeof_<_> >::type,sizes > ));
typedef max_element<
transform_view< types, sizeof_<_> >
>::type iter;