Compare commits

..

1 Commits

Author SHA1 Message Date
4686882502 Create branches/filesystem-v3 for v2 removal
[SVN r77385]
2012-03-18 20:54:17 +00:00
1018 changed files with 12671 additions and 35429 deletions

View File

@ -185,20 +185,10 @@ necessary boilerplate to make an arbitrary struct a model of
__random_access_sequence__.
[heading Synopsis]
BOOST_FUSION_ADAPT_STRUCT(
struct_name,
member_name0,
member_name1,
member_name2,
...
)
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_STRUCT(
struct_name,
(member_type0, member_name0)
(member_type1, member_name1)
(BOOST_FUSION_ADAPT_AUTO, member_name2)
...
)
@ -206,13 +196,9 @@ __random_access_sequence__.
The above macro generates the necessary code to adapt `struct_name`
as a model of __random_access_sequence__.
The sequence of `member_nameN,` arguments or `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are part of
the sequence.
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
infered with Boost.TypeOf.
The sequence of `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are
part of the sequence.
The macro should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be adapted.
@ -222,7 +208,7 @@ namespace qualified name of the struct to be adapted.
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
[heading Example: BOOST_FUSION_ADAPT_STRUCT ]
[heading Example]
namespace demo
{
struct employee
@ -235,15 +221,8 @@ namespace qualified name of the struct to be adapted.
// demo::employee is now a Fusion sequence
BOOST_FUSION_ADAPT_STRUCT(
demo::employee,
name,
age)
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_STRUCT(
demo::employee,
(BOOST_FUSION_ADAPT_AUTO, name)
(BOOST_FUSION_ADAPT_AUTO, age)
)
(std::string, name)
(int, age))
[endsect]
@ -255,21 +234,11 @@ necessary boilerplate to make an arbitrary template struct a model of
__random_access_sequence__.
[heading Synopsis]
BOOST_FUSION_ADAPT_TPL_STRUCT(
(template_param0)(template_param1)...,
(struct_name) (specialization_param0)(specialization_param1)...,
member_name0,
member_name1
...
)
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_TPL_STRUCT(
(template_param0)(template_param1)...,
(struct_name) (specialization_param0)(specialization_param1)...,
(member_type0, member_name0)
(member_type1, member_name1)
(BOOST_FUSION_ADAPT_AUTO, member_name2),
...
)
@ -283,12 +252,9 @@ the template type parameters used.
The sequence `(specialization_param0)(specialization_param1)...`
declares the template parameters of the actual specialization of `struct_name`
that is adapted as a fusion sequence.
The sequence of `member_nameN,` arguments or `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are part of
the sequence.
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
infered with Boost.TypeOf.
The sequence of `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are
part of the sequence.
The macro should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be adapted.
@ -306,7 +272,6 @@ namespace qualified name of the struct to be adapted.
{
Name name;
Age age;
int employment_timestamp;
};
}
@ -315,16 +280,7 @@ namespace qualified name of the struct to be adapted.
(Name)(Age),
(demo::employee) (Name)(Age),
(Name, name)
(Age, age)
(BOOST_FUSION_ADAPT_AUTO, employment_timestamp))
// Or by infering type completely
BOOST_FUSION_ADAPT_TPL_STRUCT(
(Name)(Age),
(demo::employee) (Name)(Age),
name,
age,
employment_timestamp)
(Age, age))
[endsect]
@ -337,31 +293,10 @@ arbitrary struct a model of __random_access_sequence__. The given struct is
adapted using the given name.
[heading Synopsis]
BOOST_FUSION_ADAPT_STRUCT_NAMED(
struct_name, adapted_name,
member_name0,
member_name1,
member_name2,
...
)
BOOST_FUSION_ADAPT_STRUCT_NAMED_NS(
struct_name,
(namespace0)(namespace1)...,
adapted_name,
member_name0,
member_name1,
member_name2,
...
)
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_STRUCT_NAMED(
struct_name, adapted_name,
(member_type0, member_name0)
(member_type1, member_name1)
(BOOST_FUSION_ADAPT_AUTO, member_name2),
...
)
@ -371,12 +306,9 @@ adapted using the given name.
adapted_name,
(member_type0, member_name0)
(member_type1, member_name1)
(BOOST_FUSION_ADAPT_AUTO, member_name2),
...
)
[heading Semantics]
The above macros generate the necessary code to adapt `struct_name`
@ -389,12 +321,9 @@ If an empty namespace sequence is given (that is a macro that expands to
nothing), the adapted view is placed in the global namespace.
If no namespace sequence is given (i.e. `BOOST_FUSION_ADAPT_STRUCT_NAMED`), the
adapted view is placed in the namespace `boost::fusion::adapted`.
The sequence of `member_nameN,` arguments or `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are part of
the sequence.
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
infered with Boost.TypeOf.
The sequence of `(member_typeN, member_nameN)`
pairs declares the type and names of each of the struct members that are
part of the sequence.
The macros should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be converted.
@ -418,14 +347,8 @@ namespace qualified name of the struct to be converted.
// referring to demo::employee
BOOST_FUSION_ADAPT_STRUCT_NAMED(
demo::employee, adapted_employee,
name,
age)
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_STRUCT_NAMED(
demo::employee, adapted_employee,
(BOOST_FUSION_ADAPT_AUTO, name),
(BOOST_FUSION_ADAPT_AUTO, age))
(std::string, name)
(int, age))
[endsect]
@ -439,8 +362,8 @@ __random_access_sequence__ and __associative_sequence__.
[heading Synopsis]
BOOST_FUSION_ADAPT_ASSOC_STRUCT(
struct_name,
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
(member_type0, member_name0, key_type0)
(member_type1, member_name1, key_type1)
...
)
@ -448,13 +371,10 @@ __random_access_sequence__ and __associative_sequence__.
The above macro generates the necessary code to adapt `struct_name`
as a model of __random_access_sequence__ and __associative_sequence__.
The sequence of `([member_typeN,] member_nameN, key_typeN)` tuples
declares the type, name and key type of each of the struct members
The sequence of `(member_typeN, member_nameN, key_typeN)`
triples declares the type, name and key type of each of the struct members
that are part of the sequence.
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
infered with Boost.TypeOf.
The macro should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be adapted.
@ -484,14 +404,8 @@ namespace qualified name of the struct to be adapted.
// keys keys::name and keys::age present.
BOOST_FUSION_ADAPT_ASSOC_STRUCT(
demo::employee,
(name, keys::name)
(age, keys::age))
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_ASSOC_STRUCT(
demo::employee,
(BOOST_FUSION_ADAPT_AUTO, name, keys::name),
(BOOST_FUSION_ADAPT_AUTO, age, keys::name))
(std::string, name, keys::name)
(int, age, keys::age))
[endsect]
@ -506,8 +420,8 @@ __random_access_sequence__ and __associative_sequence__.
BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(
(template_param0)(template_param1)...,
(struct_name) (specialization_param0)(specialization_param1)...,
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
(member_type0, member_name0, key_type0)
(member_type1, member_name1, key_type1)
...
)
@ -521,13 +435,10 @@ the template type parameters used.
The sequence `(specialization_param0)(specialization_param1)...`
declares the template parameters of the actual specialization of `struct_name`
that is adapted as a fusion sequence.
The sequence of `([member_typeN,] member_nameN, key_typeN)`
tuples declares the type, name and key type of each of the struct members
The sequence of `(member_typeN, member_nameN, key_typeN)`
triples declares the type, name and key type of each of the struct members
that are part of the sequence.
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
infered with Boost.TypeOf.
The macro should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be adapted.
@ -556,13 +467,6 @@ namespace qualified name of the struct to be adapted.
// Any instantiated demo::employee is now a Fusion sequence.
// It is also an associative sequence with
// keys keys::name and keys::age present.
BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(
(Name)(Age),
(demo::employee) (Name)(Age),
(name, keys::name)
(age, keys::age))
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT(
(Name)(Age),
(demo::employee) (Name)(Age),
@ -582,8 +486,8 @@ __associative_sequence__. The given struct is adapted using the given name.
[heading Synopsis]
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
struct_name, adapted_name,
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
(member_type0, member_name0, key_type0)
(member_type1, member_name1, key_type1)
...
)
@ -591,8 +495,8 @@ __associative_sequence__. The given struct is adapted using the given name.
struct_name,
(namespace0)(namespace1)...,
adapted_name,
([member_type0,] member_name0, key_type0)
([member_type1,] member_name1, key_type1)
(member_type0, member_name0, key_type0)
(member_type1, member_name1, key_type1)
...
)
@ -612,9 +516,6 @@ The sequence of `(member_typeN, member_nameN, key_typeN)`
triples declares the type, name and key type of each of the struct members
that are part of the sequence.
When member_typeN is omitted or set to BOOST_FUSION_ADAPT_AUTO, the type is
infered with Boost.TypeOf.
The macros should be used at global scope, and `struct_name` should be the fully
namespace qualified name of the struct to be converted.
@ -643,14 +544,8 @@ namespace qualified name of the struct to be converted.
// referring to demo::employee
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
demo::employee, adapted_employee,
(name, keys::name)
(age, keys::age))
// Without BOOST_PP_VARIADICS support :
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
demo::employee, adapted_employee,
(BOOST_FUSION_ADAPT_AUTO, name, keys::name)
(BOOST_FUSION_ADAPT_AUTO, age, keys::age))
(std::string, name, keys::name)
(int, age, keys::age))
[endsect]
@ -664,8 +559,8 @@ __random_access_sequence__.
BOOST_FUSION_ADAPT_ADT(
type_name,
([attribute_type0, attribute_const_type0,] get_expr0, set_expr0)
([attribute_type1, attribute_const_type1,] get_expr1, set_expr1)
(attribute_type0, attribute_const_type0, get_expr0, set_expr0)
(attribute_type1, attribute_const_type1, get_expr1, set_expr1)
...
)
@ -674,7 +569,7 @@ __random_access_sequence__.
The above macro generates the necessary code to adapt `type_name`
as a model of __random_access_sequence__.
The sequence of
[^([attribute_type['N], attribute_const_type['N],] get_expr['N], set_expr['N])]
[^(attribute_type['N], attribute_const_type['N], get_expr['N], set_expr['N])]
quadruples declares the types, const types, get-expressions and set-expressions
of the elements that are part of the adapted fusion sequence.
[^get_expr['N]] is the expression that is invoked to get the ['N]th element
@ -682,9 +577,7 @@ of an instance of `type_name`. This expression may access a variable named
`obj` of type `type_name&` or `type_name const&` which represents the underlying
instance of `type_name`.
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
that [^get_expr['N]] denotes to, when omitted the type is deduced from
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
variadic macros BOOST_FUSION_ADAPT_AUTO can be used to avoid repeating the type.
that [^get_expr['N]] denotes to.
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
of an instance of `type_name`. This expression may access variables named
`obj` of type `type_name&`, which represent the corresponding instance of
@ -742,8 +635,8 @@ namespace qualified name of the class type to be adapted.
BOOST_FUSION_ADAPT_ADT(
demo::employee,
(obj.get_name(), obj.set_name(val))
(obj.get_age(), obj.set_age(val)))
(std::string const&, std::string const&, obj.get_name(), obj.set_name(val))
(int, int, obj.get_age(), obj.set_age(val)))
demo::employee e;
front(e)="Edward Norton";
@ -765,11 +658,11 @@ __random_access_sequence__.
[heading Synopsis]
BOOST_FUSION_ADAPT_TPL_ADT(
BOOST_FUSION_ADAPT_ADT(
(template_param0)(template_param1)...,
(type_name) (specialization_param0)(specialization_param1)...,
([attribute_type0, attribute_const_type0,] get_expr0, set_expr0)
([attribute_type1, attribute_const_type1,] get_expr1, set_expr1)
(attribute_type0, attribute_const_type0, get_expr0, set_expr0)
(attribute_type1, attribute_const_type1, get_expr1, set_expr1)
...
)
@ -792,9 +685,7 @@ of an instance of `type_name`. This expression may access a variable named
`obj` of type `type_name&` or `type_name const&` which represents the underlying
instance of `type_name`.
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
that [^get_expr['N]] denotes to, when omitted the type is deduced from
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
variadic macros BOOST_FUSION_ADAPT_AUTO can be used to avoid repeating the type.
that [^get_expr['N]] denotes to.
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
of an instance of `type_name`. This expression may access variables named
`obj` of type `type_name&`, which represent the corresponding instance of
@ -879,8 +770,8 @@ __random_access_sequence__ and __associative_sequence__.
BOOST_FUSION_ADAPT_ASSOC_ADT(
type_name,
([attribute_type0, attribute_const_type0,] get_expr0, set_expr0, key_type0)
([attribute_type1, attribute_const_type1,] get_expr1, set_expr1, key_type1)
(attribute_type0, attribute_const_type0, get_expr0, set_expr0, key_type0)
(attribute_type1, attribute_const_type1, get_expr1, set_expr1, key_type1)
...
)
@ -897,9 +788,7 @@ of an instance of `type_name`. This expression may access a variable named
`obj` of type `type_name&` or `type_name const&` which represents the underlying
instance of `type_name`.
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
that [^get_expr['N]] denotes to, when omitted the type is deduced from
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
variadic macros BOOST_FUSION_ADAPT_AUTO can be used to avoid repeating the type.
that [^get_expr['N]] denotes to.
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
of an instance of `type_name`. This expression may access variables named
`obj` of type `type_name&`, which represent the corresponding instance of
@ -963,8 +852,8 @@ namespace qualified name of the class type to be adapted.
BOOST_FUSION_ADAPT_ASSOC_ADT(
demo::employee,
(obj.get_name(), obj.set_name(val), keys::name)
(obj.get_age(), obj.set_age(val), keys::age))
(std::string const&, std::string const&, obj.get_name(), obj.set_name(val), keys::name)
(int, int, obj.get_age(), obj.set_age(val), keys::age))
demo::employee e;
at_key<keys::name>(e)="Edward Norton";
@ -989,8 +878,8 @@ __random_access_sequence__ and __associative_sequence__.
BOOST_FUSION_ADAPT_ASSOC_TPL_ADT(
(template_param0)(template_param1)...,
(type_name) (specialization_param0)(specialization_param1)...,
([attribute_type0, attribute_const_type0,] get_expr0, set_expr0, key_type0)
([attribute_type1, attribute_const_type1,] get_expr1, set_expr1, key_type1)
(attribute_type0, attribute_const_type0, get_expr0, set_expr0, key_type0)
(attribute_type1, attribute_const_type1, get_expr1, set_expr1, key_type1)
...
)
@ -1005,7 +894,7 @@ The sequence `(specialization_param0)(specialization_param1)...`
declares the template parameters of the actual specialization of `type_name`
that is adapted as a fusion sequence.
The sequence of
[^([attribute_type['N], attribute_const_type['N],] get_expr['N], set_expr['N], key_type['N])]
[^(attribute_type['N], attribute_const_type['N], get_expr['N], set_expr['N], key_type['N])]
5-tuples declares the types, const types, get-expressions, set-expressions and key types
of the elements that are part of the adapted fusion sequence.
[^get_expr['N]] is the expression that is invoked to get the ['N]th element
@ -1013,9 +902,7 @@ of an instance of `type_name`. This expression may access a variable named
`obj` of type `type_name&` or `type_name const&` which represents the underlying
instance of `type_name`.
[^attribute_type['N]] and [^attribute_const_type['N]] may specify the types
that [^get_expr['N]] denotes to, when omitted the type is deduced from
[get_expr['N]] return type via BOOST_TYPEOF. On compiler missing support for
variadic macros BOOST_FUSION_ADAPT_AUTO can be used to avoid repeating the type.
that [^get_expr['N]] denotes to.
[^set_expr['N]] is the expression that is invoked to set the ['N]th element
of an instance of `type_name`. This expression may access variables named
`obj` of type `type_name&`, which represent the corresponding instance of
@ -1228,100 +1115,6 @@ defined in __random_access_sequence__.
[endsect]
[section:define_struct_inline BOOST_FUSION_DEFINE_STRUCT_INLINE]
[heading Description]
BOOST_FUSION_DEFINE_STRUCT_INLINE is a macro that can be used to generate all
the necessary boilerplate to define and adapt an arbitrary struct as a model of
__random_access_sequence__. Unlike BOOST_FUSION_DEFINE_STRUCT, it can be used
at class or namespace scope.
[heading Synopsis]
BOOST_FUSION_DEFINE_STRUCT_INLINE(
struct_name,
(member_type0, member_name0)
(member_type1, member_name1)
...
)
[heading Expression Semantics]
The semantics of BOOST_FUSION_DEFINE_STRUCT_INLINE are identical to those of
BOOST_FUSION_DEFINE_STRUCT, with two differences:
# BOOST_FUSION_DEFINE_STRUCT_INLINE can be used at class or namespace scope, and
thus does not take a namespace list parameter.
# The structure generated by BOOST_FUSION_DEFINE_STRUCT_INLINE has a base class,
and is thus not POD in C++03.
[heading Header]
#include <boost/fusion/adapted/struct/define_struct_inline.hpp>
#include <boost/fusion/include/define_struct_inline.hpp>
[heading Example]
// enclosing::employee is a Fusion sequence
class enclosing
{
BOOST_FUSION_DEFINE_STRUCT_INLINE(
employee,
(std::string, name)
(int, age))
};
[endsect]
[section:define_tpl_struct_inline BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE]
[heading Description]
BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE is a macro that can be used to generate
all the necessary boilerplate to define and adapt an arbitrary template struct
as a model of __random_access_sequence__. Unlike BOOST_FUSION_DEFINE_TPL_STRUCT,
it can be used at class or namespace scope.
[heading Synopsis]
BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE(
(template_param0)(template_param1)...,
struct_name,
(member_type0, member_name0)
(member_type1, member_name1)
...
)
[heading Expression Semantics]
The semantics of BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE are identical to those of
BOOST_FUSION_DEFINE_TPL_STRUCT, with two differences:
# BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE can be used at class or namespace scope,
and thus does not take a namespace list parameter.
# The structure generated by BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE has a base
class, and is thus not POD in C++03.
[heading Header]
#include <boost/fusion/adapted/struct/define_struct_inline.hpp>
#include <boost/fusion/include/define_struct_inline.hpp>
[heading Example]
// Any instantiated enclosing::employee is a Fusion sequence
class enclosing
{
BOOST_FUSION_DEFINE_TPL_STRUCT(
(Name)(Age), employee,
(Name, name)
(Age, age))
};
[endsect]
[section:define_assoc_struct BOOST_FUSION_DEFINE_ASSOC_STRUCT]
[heading Description]

View File

@ -69,7 +69,7 @@ It is also used to convert sequence into other.
[heading Synopsis]
template <typename Seq1, typename Seq2>
typename __result_of_copy__<Seq1, Seq2>::type copy(Seq1 const& src, Seq2& dest);
void copy(Seq1 const& src, Seq2& dest);
[table Parameters
[[Parameter][Requirement][Description]]
@ -100,121 +100,6 @@ Linear, exactly `__result_of_size__<Sequence>::value`.
[endsect]
[section move]
[heading Description]
move a sequence `src` to a sequence `dest`.
It is also used to convert sequence into other.
[heading Synopsis]
template <typename Seq1, typename Seq2>
typename __result_of_move__<Seq1, Seq2>::type move(Seq1&& src, Seq2& dest);
[table Parameters
[[Parameter][Requirement][Description]]
[[`src`][A model of __forward_sequence__, all elements contained in the `src` sequence should be convertible into the element contained in the `dest` sequence.][Operation's argument]]
[[`dest`][A model of __forward_sequence__, `e2 = std::move(e1)` is valid expression for each pair of elements `e1` of `src` and `e2` of `dest`.][Operation's argument]]
]
[heading Expression Semantics]
__move__(src, dest);
[*Return type]: `void`
[*Semantics]: `e2 = std::move(e1)` for each element `e1` in `src` and `e2` in `dest`.
[heading Complexity]
Linear, exactly `__result_of_size__<Sequence>::value`.
[heading Header]
#include <boost/fusion/algorithm/auxiliary/move.hpp>
#include <boost/fusion/include/move.hpp>
[heading Example]
__vector__<int,int> vec(1,2);
__list__<int,int> ls;
__move__(std::move(vec), ls);
assert(ls == __make_list__(1,2));
[endsect]
[endsect]
[section Metafunctions]
[section copy]
[heading Description]
A metafunction returning the result type of applying __copy__, which is always `void`.
[heading Synopsis]
template <typename Seq1, typename Seq2>
struct copy
{
typedef void type;
};
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq1`] [A model of __forward_sequence__] [Operation's argument]]
[[`Seq2`] [A model of __forward_sequence__] [Operation's argument]]
]
[heading Expression Semantics]
result_of::copy<Seq1, Seq2>::type
[*Return type]: `void` iff both of `Seq1` and `Seq2` are sequence.
Otherwise, none.
[*Semantics]: Returns the return type of __copy__ for 2 sequences of types `Seq1` and `Seq2`.
[heading Complexity]
Constant.
[heading Header]
#include <boost/fusion/algorithm/auxiliary/copy.hpp>
#include <boost/fusion/include/copy.hpp>
[endsect]
[section move]
[heading Description]
A metafunction returning the result type of applying __move__, which is always `void`.
[heading Synopsis]
template <typename Seq1, typename Seq2>
struct move
{
typedef void type;
};
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq1`] [A model of __forward_sequence__] [Operation's argument]]
[[`Seq2`] [A model of __forward_sequence__] [Operation's argument]]
]
[heading Expression Semantics]
result_of::move<Seq1, Seq2>::type
[*Return type]: `void` iff both of `Seq1` and `Seq2` are sequence.
Otherwise, none.
[*Semantics]: Returns the return type of __move__ for 2 sequences of types `Seq1` and `Seq2`.
[heading Complexity]
Constant.
[heading Header]
#include <boost/fusion/algorithm/auxiliary/move.hpp>
#include <boost/fusion/include/move.hpp>
[endsect]
[endsect]
[endsect]
@ -651,13 +536,13 @@ Finds the first element of a given type within a sequence.
typename T,
typename Sequence
>
typename __result_of_find__<Sequence const, T>::type find(Sequence const& seq);
__unspecified__ find(Sequence const& seq);
template<
typename T,
typename Sequence
>
typename __result_of_find__<Sequence, T>::type find(Sequence& seq);
__unspecified__ find(Sequence& seq);
[table Parameters
[[Parameter][Requirement][Description]]
@ -689,23 +574,23 @@ Linear. At most `__result_of_size__<Sequence>::value` comparisons.
[endsect]
[section find_if]
[heading Description]
Finds the first element within a sequence with a type for which a given __mpl_lambda_expression__ evaluates to
`boost::mpl::true_`.
[heading Description]
[heading Synopsis]
template<
typename F,
typename Sequence
>
typename __result_of_find_if__<Sequence const, F>::type find_if(Sequence const& seq);
__unspecified__ find_if(Sequence const& seq);
template<
typename F,
typename Sequence
>
typename __result_of_find_if__<Sequence, F>::type find_if(Sequence& seq);
__unspecified__ find_if(Sequence& seq);
[table Parameters
[[Parameter][Requirement][Description]]
@ -1444,7 +1329,7 @@ Constant. Returns a view which is lazily evaluated.
[heading Description]
Returns a new sequence with the elements of the original in reverse order.
[heading Synopsis]
[heading Synposis]
template<
typename Sequence
>
@ -1484,7 +1369,7 @@ Constant. Returns a view which is lazily evaluated.
[heading Description]
__clear__ returns an empty sequence.
[heading Synopsis]
[heading Synposis]
template<
typename Sequence
>
@ -1521,7 +1406,7 @@ Constant.
Returns a new sequence, containing all the elements of the original except those at a specified iterator, or
between two iterators.
[heading Synopsis]
[heading Synposis]
template<
typename Sequence,
typename First
@ -1582,11 +1467,11 @@ Constant. Returns a view which is lazily evaluated.
[section erase_key]
[heading Description]
For an [link fusion.sequence.concepts.associative_sequence associative] __forward_sequence__ `seq`,
returns a [link fusion.sequence.concepts.associative_sequence associative] __forward_sequence__ containing
For an [link fusion.sequence.concepts.associative_sequence associative]] __forward_sequence__ `seq`,
returns a [link fusion.sequence.concepts.associative_sequence associative]] __forward_sequence__ containing
all the elements of the original except those with a given key.
[heading Synopsis]
[heading Synposis]
template<
typename Key,
typename Sequence
@ -1625,7 +1510,7 @@ Constant. Returns a view which is lazily evaluated.
Returns a new sequence with all the elements of the original, an a new element inserted the
position described by a given iterator.
[heading Synopsis]
[heading Synposis]
template<
typename Sequence,
typename Pos,
@ -1642,7 +1527,7 @@ position described by a given iterator.
]
[heading Expression Semantics]
__insert__(seq, pos, t);
__insert__(seq, p, t);
[*Return type]:
@ -1670,7 +1555,7 @@ Constant. Returns a view which is lazily evaluated.
[heading Description]
Returns a new sequence with another sequence inserted at a specified iterator.
[heading Synopsis]
[heading Synposis]
template<
typename Sequence,
typename Pos,
@ -1695,7 +1580,7 @@ Returns a new sequence with another sequence inserted at a specified iterator.
* A model of __associative_sequence__ if `seq` implements the __associative_sequence__ model.
[*Semantics]: Returns a new sequence, containing all the elements of `seq`, and the elements of
`range` inserted at iterator `pos`. All elements retaining their ordering from the original sequences.
`range` inserted at iterator `pos`. All elements retaining their ordering from the orignal sequences.
[heading Complexity]
Constant. Returns a view which is lazily evaluated.
@ -1756,7 +1641,7 @@ Constant. Returns a view which is lazily evaluated.
[section zip]
[heading Description]
Zips sequences together to form a single sequence, whose members are tuples of the members of the component sequences.
Zips sequences together to form a single sequence, whos members are tuples of the members of the component sequences.
[heading Synopsis]
template<
@ -1956,50 +1841,6 @@ Constant. Returns a view which is lazily evaluated.
[endsect]
[section flatten]
[heading Description]
Returns a new sequence without nested sequences.
[heading Synopsis]
template<
typename Sequence
>
typename __result_of_flatten__<Sequence>::type flatten(Sequence& seq);
template<
typename Sequence
>
typename __result_of_flatten__<Sequence const>::type flatten(Sequence const& seq);
[table Parameters
[[Parameter][Requirement][Description]]
[[`seq`][A model of __forward_sequence__][Operation's argument]]
]
[heading Expression Semantics]
__flatten__(seq);
[*Return type]:
* A model of __forward_sequence__.
[*Semantics]: Returns a new sequence containing all the leaf elements of `seq`.
[heading Complexity]
Constant. Returns a view which is lazily evaluated.
[heading Header]
#include <boost/fusion/algorithm/transformation/flatten.hpp>
#include <boost/fusion/include/flatten.hpp>
[heading Example]
const __vector__<int, int, __vector__<int, int>, int> vec(1, 2, __make_vector__(3, 4), 5);
assert(__flatten__(vec) == __make_vector__(1, 2, 3, 4, 5)));
[endsect]
[endsect]
[section Metafunctions]
@ -2586,7 +2427,7 @@ Returns the result of joining 2 sequences, given the sequence types.
[*Return type]:
* A model of __forward_sequence__.
* A model of __associative_sequence__ if `LhSequence` and `RhSequence` implement the __associative_sequence__ model.
* A model of __associative_sequence__ if `LhSequence` amd `RhSequence` implement the __associative_sequence__ model.
[*Semantics]: Returns a sequence containing the elements of `LhSequence` followed by the elements of `RhSequence`. The order of the elements in the 2 sequences is preserved.
@ -2603,7 +2444,7 @@ Constant.
[section zip]
[heading Description]
Zips sequences together to form a single sequence, whose members are tuples of the members of the component sequences.
Zips sequences together to form a single sequence, whos members are tuples of the members of the component sequences.
[heading Synopsis]
template<
@ -2792,44 +2633,6 @@ Constant.
[endsect]
[section flatten]
[heading Description]
Returns the result type of __flatten__, given the input sequence type.
[heading Synopsis]
template<
typename Sequence
>
struct flatten
{
typedef __unspecified__ type;
};
[table Parameters
[[Parameter][Requirement][Description]]
[[`Sequence`][A model of __forward_sequence__][Operation's argument]]
]
[heading Expression Semantics]
__result_of_flatten__<Sequence>::type
[*Return type]:
* A model of __forward_sequence__.
[*Semantics]: Returns a sequence with all the leaf elements of `Sequence`.
[heading Complexity]
Constant.
[heading Header]
#include <boost/fusion/algorithm/transformation/flatten.hpp>
#include <boost/fusion/include/flatten.hpp>
[endsect]
[endsect]
[endsect]

View File

@ -45,8 +45,5 @@ This section summarizes significant changes to the Fusion library.
compilation (Joel de Guzman)
* October 8, 2011: Added adaptor for std::tuple (Joel de Guzman)
* October 10, 2011: Made map random access (Brandon Kohn)
* April 7, 2012: Added C++11 version of deque
* May 19, 2012: Added BOOST_FUSION_DEFINE_STRUCT_INLINE by Nathan Ridge
* September 1, 2012: Added move support for deque and vector
[endsect]

View File

@ -9,7 +9,7 @@
[section Container]
Fusion provides a few predefined sequences out of the box. These
/containers/ actually hold heterogeneously typed data; unlike
/containers/ actually hold heterogenously typed data; unlike
__views__. These containers are more or less counterparts of those in __stl__.
[heading Header]
@ -21,11 +21,10 @@ __views__. These containers are more or less counterparts of those in __stl__.
[heading Description]
`vector` is a __random_access_sequence__ of heterogeneous typed data
structured as a simple `struct` where each element is held as a member
variable. `vector` is the simplest of the Fusion sequence container (a
vector with N elements is just a struct with N members), and in many
cases the most efficient.
`vector` is a __random_access_sequence__ of heterogenous typed
data structured as a simple `struct` where each element is held
as a member variable. `vector` is the simplest of the Fusion
sequence container, and in many cases the most efficient.
[heading Header]
@ -96,7 +95,7 @@ including any Fusion header to change the default. Example:
[table
[[Parameter] [Description] [Default]]
[[`T0`...`TN`] [Element types] [__unspecified__]]
[[`T0`...`TN`] [Element types] [['unspecified]]]
]
[heading Model of]
@ -157,7 +156,7 @@ time). The runtime cost of access to each element is peculiarly constant
[table
[[Parameter] [Description] [Default]]
[[`Car`] [Head type] [ ]]
[[`Car`] [Head type] []]
[[`Cdr`] [Tail type] [`nil`]]
]
@ -209,7 +208,7 @@ constant (see __recursive_inline__).]
[heading Description]
`list` is a __forward_sequence__ of heterogeneous typed data built on top of
`list` is a __forward_sequence__ of heterogenous typed data built on top of
__cons__. It is more efficient than __vector__ when the target sequence is
constructed piecemeal (a data at a time). The runtime cost of access to
each element is peculiarly constant (see __recursive_inline__).
@ -247,7 +246,7 @@ including any Fusion header to change the default. Example:
[table
[[Parameter] [Description] [Default]]
[[`T0`...`TN`] [Element types] [__unspecified__]]
[[`T0`...`TN`] [Element types] [['unspecified-type]]]
]
[heading Model of]
@ -290,225 +289,11 @@ constant (see __recursive_inline__).]
[endsect]
[section deque]
[heading Description]
`deque` is a simple __bidirectional_sequence__ that supports
constant-time insertion and removal of elements at both ends. Like the
__list__ and __cons__, `deque` is more efficient than __vector__
(especially at compile time) when the target sequence is constructed
piecemeal (a data at a time, e.g. when constructing expression
templates). Like the __list__ and __cons__, runtime cost of access to
each element is peculiarly constant (see __recursive_inline__).
Element insertion and removal are done by special `deque` helper classes
__front_extended_deque__ and __back_extended_deque__.
[heading Header]
#include <boost/fusion/container/deque.hpp>
#include <boost/fusion/include/deque.hpp>
#include <boost/fusion/container/list/deque_fwd.hpp>
#include <boost/fusion/include/deque_fwd.hpp>
[heading Synopsis]
template <typename ...Elements>
struct deque;
For C++11 compilers, the variadic class interface has no upper bound.
For C++03 compilers, the variadic class interface accepts `0` to
`FUSION_MAX_DEQUE_SIZE` elements, where `FUSION_MAX_DEQUE_SIZE` is a
user definable predefined maximum that defaults to `10`. Example:
deque<int, char, double>
You may define the preprocessor constant `FUSION_MAX_DEQUE_SIZE` before
including any Fusion header to change the default. Example:
#define FUSION_MAX_DEQUE_SIZE 20
[heading Template parameters]
[table
[[Parameter] [Description] [Default]]
[[`Elements`] [Element types] [ ]]
]
[heading Model of]
* __bidirectional_sequence__
[variablelist Notation
[[`D`] [A `deque` type]]
[[`d`, `d2`] [Instances of `deque`]]
[[`e0`...`en`] [Heterogeneous values]]
[[`s`] [A __forward_sequence__]]
[[`N`] [An __mpl_integral_constant__]]
]
[heading Expression Semantics]
Semantics of an expression is defined only where it differs from, or is not
defined in __bidirectional_sequence__.
[table
[[Expression] [Semantics]]
[[`D()`] [Creates a deque with default constructed elements.]]
[[`D(e0, e1,... en)`] [Creates a deque with elements `e0`...`en`.]]
[[`D(s)`] [Copy constructs a deque from a __forward_sequence__, `s`.]]
[[`d = s`] [Assigns to a deque, `d`, from a __forward_sequence__, `s`.]]
[[`__at__<N>(d)`] [The Nth element from the beginning of the sequence; see __at__.]]
]
[blurb __note__ `__at__<N>(d)` is provided for convenience, despite
`deque` being a __bidirectional_sequence__ only (`at` is supposed to be
a __random_access_sequence__ requirement). The runtime complexity of
__at__ is constant (see __recursive_inline__). `deque` element access
utilizes operator overloading with argument dependent lookup (ADL) of
the proper element getter function given a static constant index
parameter. Interestingly, with modern C++ compilers, this lookup is very
fast and rivals recursive template instantiations in compile time-speed,
so much so that `deque` relies on ADL for all element access (indexing)
as well as iteration.]
[heading Example]
deque<int, float> d(12, 5.5f);
std::cout << __at_c__<0>(d) << std::endl;
std::cout << __at_c__<1>(d) << std::endl;
[endsect]
[section front_extended_deque]
[heading Description]
`front_extended_deque` allows a __deque__ to be front extended. It shares
the same properties as the __deque__.
[heading Header]
See __deque__
[heading Synopsis]
template <typename Deque, typename T>
struct front_extended_deque;
[heading Template parameters]
[table
[[Parameter] [Description] [Default]]
[[`Deque`] [Deque type] [ ]]
[[`T`] [Element type] [ ]]
]
[blurb __note__ `Deque` can be a __deque__, a __front_extended_deque__ or a
__back_extended_deque__]
[heading Model of]
* __bidirectional_sequence__
[variablelist Notation
[[`D`] [A `front_extended_deque` type]]
[[`e`] [Heterogeneous value]]
[[`N`] [An __mpl_integral_constant__]]
]
[heading Expression Semantics]
Semantics of an expression is defined only where it differs from, or is
not defined in __bidirectional_sequence__.
[table
[[Expression] [Semantics]]
[[`D(d, e)`] [Extend `d` prepending `e` to its front.]]
[[`__at__<N>(d)`] [The Nth element from the beginning of the sequence; see __at__.]]
]
[blurb __note__ See __deque__ for further details.]
[heading Example]
typedef deque<int, float> initial_deque;
initial_deque d(12, 5.5f);
front_extended_deque<initial_deque, int> d2(d, 999);
std::cout << __at_c__<0>(d2) << std::endl;
std::cout << __at_c__<1>(d2) << std::endl;
std::cout << __at_c__<2>(d2) << std::endl;
[endsect]
[section back_extended_deque]
[heading Description]
`back_extended_deque` allows a __deque__ to be back extended. It shares
the same properties as the __deque__.
[heading Header]
See __deque__
[heading Synopsis]
template <typename Deque, typename T>
struct back_extended_deque;
[heading Template parameters]
[table
[[Parameter] [Description] [Default]]
[[`Deque`] [Deque type] [ ]]
[[`T`] [Element type] [ ]]
]
[blurb __note__ `Deque` can be a __deque__, a __back_extended_deque__ or a
__back_extended_deque__]
[heading Model of]
* __bidirectional_sequence__
[variablelist Notation
[[`D`] [A `back_extended_deque` type]]
[[`e`] [Heterogeneous value]]
[[`N`] [An __mpl_integral_constant__]]
]
[heading Expression Semantics]
Semantics of an expression is defined only where it differs from, or is
not defined in __bidirectional_sequence__.
[table
[[Expression] [Semantics]]
[[`D(d, e)`] [Extend `d` prepending `e` to its back.]]
[[`__at__<N>(d)`] [The Nth element from the beginning of the sequence; see __at__.]]
]
[blurb __note__ See __deque__ for further details.]
[heading Example]
typedef deque<int, float> initial_deque;
initial_deque d(12, 5.5f);
back_extended_deque<initial_deque, int> d2(d, 999);
std::cout << __at_c__<0>(d2) << std::endl;
std::cout << __at_c__<1>(d2) << std::endl;
std::cout << __at_c__<2>(d2) << std::endl;
[endsect]
[section set]
[heading Description]
set is an __associative_sequence__ of heterogeneous typed data elements.
set is an __associative_sequence__ of heteregenous typed data elements.
Type identity is used to impose an equivalence relation on keys. The
element's type is its key. A set may contain at most one element for each
key. Membership testing and element key lookup has constant runtime
@ -547,7 +332,7 @@ including any Fusion header to change the default. Example:
[table
[[Parameter] [Description] [Default]]
[[`T0`...`TN`] [Element types] [__unspecified__]]
[[`T0`...`TN`] [Element types] [['unspecified-type]]]
]
[heading Model of]
@ -589,7 +374,7 @@ defined in __random_access_sequence__ and __associative_sequence__.
[heading Description]
map is an __associative_sequence__ of heterogeneous typed data elements.
map is an __associative_sequence__ of heteregenous typed data elements.
Each element is a key/data pair (see __fusion_pair__) where the key has no
data (type only). Type identity is used to impose an equivalence relation
on keys. A map may contain at most one element for each key. Membership
@ -629,7 +414,7 @@ including any Fusion header to change the default. Example:
[table
[[Parameter] [Description] [Default]]
[[`T0`...`TN`] [Element types] [__unspecified__]]
[[`T0`...`TN`] [Element types] [['unspecified-type]]]
]
[heading Model of]
@ -832,58 +617,6 @@ __note_boost_ref__
[endsect]
[section make_deque]
[heading Description]
Create a __deque__ from one or more values.
[heading Synopsis]
template <typename ...Elements>
typename __result_of_make_deque__<Elements...>::type
make_deque(Elements const&... elements);
For C++11 compilers, the variadic function interface has no upper bound.
For C++03 compilers, the variadic function accepts `0` to
`FUSION_MAX_DEQUE_SIZE` elements, where `FUSION_MAX_DEQUE_SIZE` is a
user definable predefined maximum that defaults to `10`. You may define
the preprocessor constant `FUSION_MAX_DEQUE_SIZE` before including any
Fusion header to change the default. Example:
#define FUSION_MAX_DEQUE_SIZE 20
[heading Parameters]
[table
[[Parameter] [Description] [Description]]
[[`elements`] [Instances of `Elements`] [The arguments to `make_deque`]]
]
[heading Expression Semantics]
make_deque(elements...);
[*Return type]: __result_of_make_deque__`<Elements...>::type`
[*Semantics]: Create a __deque__ from `elements...`.
[heading Header]
#include <boost/fusion/container/generation/make_deque.hpp>
#include <boost/fusion/include/make_deque.hpp>
[heading Example]
make_deque(123, "hello", 12.5)
[heading See also]
__note_boost_ref__
[endsect]
[section make_set]
[heading Description]
@ -950,9 +683,7 @@ Create a __map__ from one or more key/data pairs.
typename __result_of_make_map__<K0, K0,... KN, T0, T1,... TN>::type
make_map(T0 const& x0, T1 const& x1... TN const& xN);
For C++11 compilers, the variadic function interface has no upper bound.
For C++03 compilers, the variadic function accepts `0` to `FUSION_MAX_MAP_SIZE` elements,
The variadic function accepts `0` to `FUSION_MAX_MAP_SIZE` elements,
where `FUSION_MAX_MAP_SIZE` is a user definable predefined maximum that
defaults to `10`. You may define the preprocessor constant
`FUSION_MAX_MAP_SIZE` before including any Fusion header to change the
@ -1003,17 +734,16 @@ succeeding sections document the various /tier/ flavors.
* __list_tie__
* __vector_tie__
* __map_tie__
* __deque_tie__
Example:
int i; char c; double d;
...
__vector_tie__(i, c, d);
__vector_tie__(i, c, a);
The __vector_tie__ function creates a __vector__ of type
`__vector__<int&, char&, double&>`. The same result could be achieved with the call
__make_vector__(__boost_ref_call__(i), __boost_ref_call__(c), __boost_ref_call__(d))
__make_vector__(__boost_ref_call__(i), __boost_ref_call__(c), __boost_ref_call__(a))
[footnote see __boost_ref__ for details about `ref`].
A /tie/ can be used to 'unpack' another tuple into variables. E.g.:
@ -1184,56 +914,6 @@ including any Fusion header to change the default. Example:
[endsect]
[section deque_tie]
[heading Description]
Constructs a tie using a __deque__ sequence.
[heading Synopsis]
template <typename ...Elements>
__deque__<Elements&...>
deque_tie(Elements&... elements);
For C++11 compilers, the variadic function interface has no upper bound.
For C++03 compilers, the variadic function accepts `0` to
`FUSION_MAX_DEQUE_SIZE` elements, where `FUSION_MAX_DEQUE_SIZE` is a
user definable predefined maximum that defaults to `10`. You may define
the preprocessor constant `FUSION_MAX_DEQUE_SIZE` before including any
Fusion header to change the default. Example:
#define FUSION_MAX_DEQUE_SIZE 20
[heading Parameters]
[table
[[Parameter] [Description] [Description]]
[[`elements`] [Instances of `Elements`] [The arguments to `deque_tie`]]
]
[heading Expression Semantics]
deque_tie(elements...);
[*Return type]: __deque__<Elements&...>
[*Semantics]: Create a __deque__ of references from `elements...`.
[heading Header]
#include <boost/fusion/container/generation/deque_tie.hpp>
#include <boost/fusion/include/deque_tie.hpp>
[heading Example]
int i = 123;
double d = 123.456;
deque_tie(i, d)
[endsect]
[endsect]
[section MetaFunctions]
@ -1368,54 +1048,6 @@ rules for __element_conversion__.
[endsect]
[section make_deque]
[heading Description]
Returns the result type of __make_deque__.
[heading Synopsis]
template <typename ...Elements>
struct make_deque;
For C++11 compilers, the variadic template interface has no upper bound.
For C++03 The variadic function accepts `0` to `FUSION_MAX_DEQUE_SIZE`
elements, where `FUSION_MAX_DEQUE_SIZE` is a user definable predefined
maximum that defaults to `10`. You may define the preprocessor constant
`FUSION_MAX_DEQUE_SIZE` before including any Fusion header to change the
default. Example:
#define FUSION_MAX_DEQUE_SIZE 20
[heading Parameters]
[table
[[Parameter] [Requirement] [Description]]
[[`Elements`] [Variadic template types] [Template arguments to `make_deque`]]
]
[heading Expression Semantics]
result_of::make_deque<Elements...>::type
[*Return type]: A __deque__ with elements of types converted following the
rules for __element_conversion__.
[*Semantics]: Create a __deque__ from `Elements...`.
[heading Header]
#include <boost/fusion/container/generation/make_deque.hpp>
#include <boost/fusion/include/make_deque.hpp>
[heading Example]
result_of::make_deque<int, const char(&)[7], double>::type
[endsect]
[section make_set]
[heading Description]
@ -1470,10 +1102,6 @@ rules for __element_conversion__.
Returns the result type of __make_map__.
The implementation depends on the support of variadic templates.
When variadic templates are not supported, make_map is a metafunction of the form:
[heading Synopsis]
template <
@ -1481,9 +1109,7 @@ When variadic templates are not supported, make_map is a metafunction of the for
, typename T0, typename T1,... typename TN>
struct make_map;
For C++11 compilers, the variadic function interface has no upper bound.
For C++03 compilers, the variadic function accepts `0` to `FUSION_MAX_MAP_SIZE` elements,
The variadic function accepts `0` to `FUSION_MAX_MAP_SIZE` elements,
where `FUSION_MAX_MAP_SIZE` is a user definable predefined maximum that
defaults to `10`. You may define the preprocessor constant
`FUSION_MAX_MAP_SIZE` before including any Fusion header to change the
@ -1491,18 +1117,6 @@ default. Example:
#define FUSION_MAX_MAP_SIZE 20
When variadic templates are supported, make_map is a metafunction class of the form:
[heading Synopsis]
template <
typename K0, typename K1,... typename KN>
struct make_map
{
struct apply<
typename T0, typename T1,... typename TN>
};
[heading Parameters]
[table
@ -1513,16 +1127,9 @@ When variadic templates are supported, make_map is a metafunction class of the f
[heading Expression Semantics]
#if !defined(BOOST_FUSION_HAS_VARIADIC_MAP)
resulf_of::make_map<K0, K1,... KN, T0, T1,... TN>::type;
#else
resulf_of::make_map<K0, K1,... KN>::apply<T0, T1,... TN>::type;
#endif
[*Return type]: __result_of_make_map__`<K0, K0,... KN, T0, T1,... TN>::type`
when variadic templates are not supported, or
__result_of_make_map__`<K0, K0,... KN>::apply<T0, T1,... TN>::type`
when variadic templates are supported.
[*Semantics]: A __map__ with __fusion_pair__ elements where the
`second_type` is converted following the rules for __element_conversion__.
@ -1536,11 +1143,7 @@ when variadic templates are supported.
[heading Example]
#if !defined(BOOST_FUSION_HAS_VARIADIC_MAP)
result_of::make_map<int, double, char, double>::type
#else
result_of::make_map<int, double>::apply<char, double>::type
#endif
[heading See also]
@ -1637,53 +1240,6 @@ default. Example:
[endsect]
[section deque_tie]
[heading Description]
Returns the result type of __deque_tie__.
[heading Synopsis]
template <typename ...Elements>
struct deque_tie;
For C++11 compilers, the variadic template interface has no upper bound.
For C++03 compilers, the variadic function accepts `0` to
`FUSION_MAX_DEQUE_SIZE` elements, where `FUSION_MAX_DEQUE_SIZE` is a
user definable predefined maximum that defaults to `10`. You may define
the preprocessor constant `FUSION_MAX_DEQUE_SIZE` before including any
Fusion header to change the default. Example:
#define FUSION_MAX_DEQUE_SIZE 20
[heading Parameters]
[table
[[Parameter] [Requirement] [Description]]
[[`Elements`] [Variadic template types] [Template arguments to `deque_tie`]]
]
[heading Expression Semantics]
result_of::deque_tie<Elements...>::type;
[*Return type]: __deque__<Elements&...>
[*Semantics]: Create a __deque__ of references from `Elements...`.
[heading Header]
#include <boost/fusion/container/generation/deque_tie.hpp>
#include <boost/fusion/include/deque_tie.hpp>
[heading Example]
result_of::deque_tie<int, double>::type
[endsect]
[section map_tie]
[heading Description]
@ -1832,48 +1388,6 @@ Convert a fusion sequence to a __vector__.
[endsect]
[section as_deque]
[heading Description]
Convert a fusion sequence to a __deque__.
[heading Synopsis]
template <typename Sequence>
typename result_of::as_deque<Sequence>::type
as_deque(Sequence& seq);
template <typename Sequence>
typename result_of::as_deque<Sequence const>::type
as_deque(Sequence const& seq);
[heading Parameters]
[table
[[Parameter] [Requirement] [Description]]
[[`seq`] [An instance of Sequence] [The sequence to convert.]]
]
[heading Expression Semantics]
as_deque(seq);
[*Return type]: __result_of_as_deque__`<Sequence>::type`
[*Semantics]: Convert a fusion sequence, `seq`, to a __deque__.
[heading Header]
#include <boost/fusion/container/deque/convert.hpp>
#include <boost/fusion/include/as_deque.hpp>
[heading Example]
as_deque(__make_vector__('x', 123, "hello"))
[endsect]
[section as_set]
[heading Description]
@ -2045,44 +1559,6 @@ Returns the result type of __as_vector__.
[endsect]
[section as_deque]
[heading Description]
Returns the result type of __as_deque__.
[heading Synopsis]
template <typename Sequence>
struct as_deque;
[heading Parameters]
[table
[[Parameter] [Requirement] [Description]]
[[`Sequence`] [A fusion __sequence__] [The sequence type to convert.]]
]
[heading Expression Semantics]
result_of::as_deque<Sequence>::type;
[*Return type]: A __deque__ with same elements as the input sequence,
`Sequence`.
[*Semantics]: Convert a fusion sequence, `Sequence`, to a __deque__.
[heading Header]
#include <boost/fusion/container/deque/convert.hpp>
#include <boost/fusion/include/as_deque.hpp>
[heading Example]
result_of::as_deque<__vector__<char, int> >::type
[endsect]
[section as_set]
[heading Description]

View File

@ -71,7 +71,7 @@ tag type for operations involving our sequence. This is done by specializing
}}}
`traits::tag_of` also has a second template argument,
that can be used in conjunction with `boost::enable_if` to provide tag
that can be used in conjuction with `boost::enable_if` to provide tag
support for groups of related types. This feature is not necessary
for our sequence, but for an example see the code in:
@ -228,7 +228,7 @@ bit of metaprogramming to return `const` references if the underlying sequence
is const.
[note Although there is a fair amount of left to do to produce a fully fledged
Fusion sequence, __result_of_value_of__ and __deref__ illustrate all the significant concepts
Fusion sequence, __result_of_value_of__ and __deref__ illustrate all the signficant concepts
required. The remainder of the process is very repetitive, simply requiring
implementation of a suitable `xxxx_impl` for each feature `xxxx`.
]
@ -378,7 +378,7 @@ the example code.
We've now worked through the entire process for adding a new random
access sequence and we've also enabled our type to serve as an associative
sequence. The implementation was slightly long-winded, but followed
sequence. The implementation was slightly longwinded, but followed
a simple repeating pattern.
The support for `std::pair`, __mpl__ sequences, and `boost::array` all

View File

@ -364,7 +364,7 @@ implemented).
[heading Header]
#include <boost/fusion/functional/invocation/invoke_procedure.hpp>
#include <booost/fusion/functional/invocation/invoke_procedure.hpp>
[heading Example]
__vector__<int,int> v(1,2);
@ -644,7 +644,7 @@ An unary __poly_func_obj__ adapter template for __callable_obj__ target
functions. It takes a __forward_sequence__ that contains the arguments for
the target function.
The result is discarded and the adapter's return type is `void`.
The result is discared and the adapter's return type is `void`.
The type of the target function is allowed to be const qualified or a
reference. Const qualification is preserved and propagated appropriately
@ -922,7 +922,7 @@ An n-ary __poly_func_obj__ adapter template for an unary __poly_func_obj__
target function. When called, its arguments are bundled to a
__random_access_sequence__ that is passed to the target function object.
The call operators of resulting function objects are strictly typed
The call operators of esulting function objects are strictly typed
(in other words, non-templatized) with the types from a __sequence__.
The type of the target function is allowed to be const qualified or a

View File

@ -11,7 +11,7 @@
[quickbook 1.3]
[version 2.2]
[authors [de Guzman, Joel], [Marsden, Dan], [Schwinger, Tobias]]
[copyright 2001 2002 2003 2004 2005 2006 2011 2012 Joel de Guzman, Dan Marsden, Tobias Schwinger]
[copyright 2001 2002 2003 2004 2005 2006 2011 Joel de Guzman, Dan Marsden, Tobias Schwinger]
[purpose Statically Typed Heterogeneous Data Structures and Algorithms]
[license
Distributed under the Boost Software License, Version 1.0.
@ -26,11 +26,11 @@
[def __caution__ [$images/caution.png]]
[def __spirit__ [@http://spirit.sourceforge.net Spirit]]
[def __phoenix__ [@http://www.boost.org/libs/phoenix/index.html Phoenix]]
[def __phoenix__ [@http://boost.org/libs/spirit/phoenix/index.html Phoenix]]
[def __mpl__ [@http://www.boost.org/libs/mpl/index.html MPL]]
[def __stl__ [@http://en.wikipedia.org/wiki/Standard_Template_Library STL]]
[def __tuple__ [@http://www.boost.org/libs/tuple/doc/tuple_users_guide.html Boost.Tuple]]
[def __tr1__tuple__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1403.pdf TR1 Tuple]]
[def __tr1__tuple__ [@http://std.dkuug.dk/jtc1/sc22/wg21/docs/papers/2002/n1403.pdf TR1 Tuple]]
[def __boost_tools__ [@http://www.boost.org/tools/index.html Boost Tools]]
[def __spirit_list__ [@https://lists.sourceforge.net/lists/listinfo/spirit-general Spirit Mailing List]]
[def __spirit_general__ [@news://news.gmane.org/gmane.comp.spirit.general Spirit General NNTP news portal]]
@ -40,8 +40,8 @@
[def __david_abrahams__ [@http://www.boost.org/people/dave_abrahams.htm David Abrahams]]
[def __the_forwarding_problem__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1385.htm The Forwarding Problem]]
[def __boost_any__ [@http://www.boost.org/doc/html/any.html Boost.Any]]
[def __new_iterator_concepts__ [@http://www.boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts]]
[def __boost_any__ [@http://boost.org/doc/html/any.html Boost.Any]]
[def __new_iterator_concepts__ [@http://boost.org/libs/iterator/doc/new-iter-concepts.html New Iterator Concepts]]
[def __boost_array_library__ [@http://www.boost.org/doc/html/array.html Boost.Array Library]]
[def __boost_variant_library__ [@http://www.boost.org/doc/html/variant.html Boost.Variant Library]]
[def __boost_tuple_library__ [@http://www.boost.org/libs/tuple/doc/tuple_users_guide.html Boost.Tuple Library]]
@ -53,7 +53,6 @@
[def __boost_shared_ptr_call__ [@http://www.boost.org/libs/smart_ptr/shared_ptr.htm `boost::shared_ptr`]]
[def __boost_func_forward__ [@http://www.boost.org/libs/functional/forward/doc/html/index.html Boost.Functional/Forward]]
[def __boost_func_factory__ [@http://www.boost.org/libs/functional/factory/doc/html/index.html Boost.Functional/Factory]]
[def __boost_func_hash__ [@http://www.boost.org/doc/html/hash.html Boost.Functional/Hash]]
[def __std_pair_doc__ [@http://www.sgi.com/tech/stl/pair.html `std::pair`]]
[def __std_plus_doc__ [@http://www.sgi.com/tech/stl/plus.html `std::plus`]]
[def __std_minus_doc__ [@http://www.sgi.com/tech/stl/minus.html `std::minus`]]
@ -117,9 +116,6 @@
[def __vector__ [link fusion.container.vector `vector`]]
[def __cons__ [link fusion.container.cons `cons`]]
[def __list__ [link fusion.container.list `list`]]
[def __deque__ [link fusion.container.deque `deque`]]
[def __front_extended_deque__ [link fusion.container.front_extended_deque `front_extended_deque`]]
[def __back_extended_deque__ [link fusion.container.back_extended_deque `back_extended_deque`]]
[def __set__ [link fusion.container.set `set`]]
[def __map__ [link fusion.container.map `map`]]
@ -132,7 +128,6 @@
[def __transform_view__ [link fusion.view.transform_view `transform_view`]]
[def __reverse_view__ [link fusion.view.reverse_view `reverse_view`]]
[def __zip_view__ [link fusion.view.zip_view `zip_view`]]
[def __flatten_view__ [link fusion.view.flatten_view `flatten_view`]]
[def __array__ [link fusion.adapted.array array]]
[def __std_pair__ [link fusion.adapted.std__pair `std::pair`]]
@ -178,8 +173,6 @@
[def __result_of_value_at__ [link fusion.sequence.intrinsic.metafunctions.value_at `result_of::value_at`]]
[def __result_of_value_at_c__ [link fusion.sequence.intrinsic.metafunctions.value_at_c `result_of::value_at_c`]]
[def __result_of_value_at_key__ [link fusion.sequence.intrinsic.metafunctions.value_at_key `result_of::value_at_key`]]
[def __swap__ [link fusion.sequence.intrinsic.functions.swap `swap`]]
[def __result_of_swap__ [link fusion.sequence.intrinsic.metafunctions.swap `result_of::swap`]]
[def __conversion__ [link fusion.container.conversion.functions Conversion]]
[def __result_of_conversion__ [link fusion.container.conversion.metafunctions Conversion Metafunctions]]
@ -205,16 +198,12 @@
[def __result_of_make_cons__ [link fusion.container.generation.metafunctions.make_cons `result_of::make_cons`]]
[def __make_list__ [link fusion.container.generation.functions.make_list `make_list`]]
[def __result_of_make_list__ [link fusion.container.generation.metafunctions.make_list `result_of::make_list`]]
[def __make_deque__ [link fusion.container.generation.functions.make_deque `make_deque`]]
[def __result_of_make_deque__ [link fusion.container.generation.metafunctions.make_deque `result_of::make_deque`]]
[def __make_set__ [link fusion.container.generation.functions.make_set `make_set`]]
[def __result_of_make_set__ [link fusion.container.generation.metafunctions.make_set `result_of::make_set`]]
[def __make_map__ [link fusion.container.generation.functions.make_map `make_map`]]
[def __result_of_make_map__ [link fusion.container.generation.metafunctions.make_map `result_of::make_map`]]
[def __list_tie__ [link fusion.container.generation.functions.list_tie `list_tie`]]
[def __result_of_list_tie__ [link fusion.container.generation.metafunctions.list_tie `result_of::list_tie`]]
[def __deque_tie__ [link fusion.container.generation.functions.deque_tie `deque_tie`]]
[def __result_of_deque_tie__ [link fusion.container.generation.metafunctions.deque_tie `result_of::deque_tie`]]
[def __out__ [link fusion.sequence.operator.i_o.out out]]
[def __in__ [link fusion.sequence.operator.i_o.in in]]
@ -228,9 +217,6 @@
[def __algorithm__ [link fusion.algorithm Algorithm]]
[def __algorithms__ [link fusion.algorithm Algorithms]]
[def __copy__ [link fusion.algorithm.auxiliary.functions.copy `copy`]]
[def __result_of_copy__ [link fusion.algorithm.auxiliary.metafunctions.copy `result_of::copy`]]
[def __move__ [link fusion.algorithm.auxiliary.functions.move `move`]]
[def __result_of_move__ [link fusion.algorithm.auxiliary.metafunctions.move `result_of::move`]]
[def __fold__ [link fusion.algorithm.iteration.functions.fold `fold`]]
[def __result_of_fold__ [link fusion.algorithm.iteration.metafunctions.fold `result_of::fold`]]
[def __reverse_fold__ [link fusion.algorithm.iteration.functions.reverse_fold `reverse_fold`]]
@ -295,8 +281,6 @@
[def __result_of_push_back__ [link fusion.algorithm.transformation.metafunctions.push_back `result_of::push_back`]]
[def __push_front__ [link fusion.algorithm.transformation.functions.push_front `push_front`]]
[def __result_of_push_front__ [link fusion.algorithm.transformation.metafunctions.push_front `result_of::push_front`]]
[def __flatten__ [link fusion.algorithm.transformation.functions.flatten `flatten`]]
[def __result_of_flatten__ [link fusion.algorithm.transformation.metafunctions.flatten `result_of::flatten`]]
[def __tr1_tuple_pair__ [link fusion.tuple.pairs `TR1 and std::pair`]]
[def __tuple_get__ [link fusion.tuple.class_template_tuple.element_access `get`]]

0
doc/html/images/alert.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 603 B

After

Width:  |  Height:  |  Size: 603 B

0
doc/html/images/home.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 358 B

After

Width:  |  Height:  |  Size: 358 B

0
doc/html/images/next.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 336 B

After

Width:  |  Height:  |  Size: 336 B

0
doc/html/images/note.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 658 B

After

Width:  |  Height:  |  Size: 658 B

0
doc/html/images/prev.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 334 B

After

Width:  |  Height:  |  Size: 334 B

0
doc/html/images/smiley.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 867 B

After

Width:  |  Height:  |  Size: 867 B

0
doc/html/images/tip.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 640 B

After

Width:  |  Height:  |  Size: 640 B

0
doc/html/images/up.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 370 B

After

Width:  |  Height:  |  Size: 370 B

View File

@ -1,282 +1,16 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Chapter&#160;1.&#160;Fusion 2.2</title>
<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="index.html" title="Chapter&#160;1.&#160;Fusion 2.2">
<link rel="next" href="fusion/preface.html" title="Preface">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
<td align="center"><a href="../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="fusion/preface.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
<div class="chapter">
<div class="titlepage"><div>
<div><h2 class="title">
<a name="fusion"></a>Chapter&#160;1.&#160;Fusion 2.2</h2></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Joel</span> <span class="surname">de Guzman</span>
</h3></div></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Dan</span> <span class="surname">Marsden</span>
</h3></div></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Tobias</span> <span class="surname">Schwinger</span>
</h3></div></div>
<div><p class="copyright">Copyright &#169; 2001-2006, 2011, 2012 Joel de Guzman,
Dan Marsden, Tobias Schwinger</p></div>
<div><div class="legalnotice">
<a name="fusion.legal"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></div>
</div></div>
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="section"><a href="fusion/preface.html">Preface</a></span></dt>
<dt><span class="section"><a href="fusion/introduction.html">Introduction</a></span></dt>
<dt><span class="section"><a href="fusion/quick_start.html">Quick Start</a></span></dt>
<dt><span class="section"><a href="fusion/organization.html">Organization</a></span></dt>
<dt><span class="section"><a href="fusion/support.html">Support</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/support/is_sequence.html">is_sequence</a></span></dt>
<dt><span class="section"><a href="fusion/support/is_view.html">is_view</a></span></dt>
<dt><span class="section"><a href="fusion/support/tag_of.html">tag_of</a></span></dt>
<dt><span class="section"><a href="fusion/support/category_of.html">category_of</a></span></dt>
<dt><span class="section"><a href="fusion/support/deduce.html">deduce</a></span></dt>
<dt><span class="section"><a href="fusion/support/deduce_sequence.html">deduce_sequence</a></span></dt>
<dt><span class="section"><a href="fusion/support/pair.html">pair</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator.html">Iterator</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/concepts.html">Concepts</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/concepts/forward_iterator.html">Forward
Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/bidirectional_iterator.html">Bidirectional
Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/random_access_iterator.html">Random
Access Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/associative_iterator.html">Associative
Iterator</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator/functions.html">Functions</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/functions/deref.html">deref</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/next.html">next</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/prior.html">prior</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/distance.html">distance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/advance.html">advance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/advance_c.html">advance_c</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/deref_data.html">deref_data</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator/operator.html">Operator</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/operator/operator_unary_star.html">Operator
*</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/operator/operator_equality.html">Operator
==</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/operator/operator_inequality.html">Operator
!=</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator/metafunctions.html">Metafunctions</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/metafunctions/value_of.html">value_of</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/deref.html">deref</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/next.html">next</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/prior.html">prior</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/equal_to.html">equal_to</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/distance.html">distance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/advance.html">advance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/advance_c.html">advance_c</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/key_of.html">key_of</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/value_of_data.html">value_of_data</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/deref_data.html">deref_data</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/sequence.html">Sequence</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/concepts.html">Concepts</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/concepts/forward_sequence.html">Forward
Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/bidirectional_sequence.html">Bidirectional
Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/random_access_sequence.html">Random
Access Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/associative_sequence.html">Associative
Sequence</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/sequence/intrinsic.html">Intrinsic</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/intrinsic/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/intrinsic/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/sequence/operator.html">Operator</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/operator/i_o.html">I/O</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/operator/comparison.html">Comparison</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/operator/hashing.html">Hashing</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/container.html">Container</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/container/vector.html">vector</a></span></dt>
<dt><span class="section"><a href="fusion/container/cons.html">cons</a></span></dt>
<dt><span class="section"><a href="fusion/container/list.html">list</a></span></dt>
<dt><span class="section"><a href="fusion/container/deque.html">deque</a></span></dt>
<dt><span class="section"><a href="fusion/container/front_extended_deque.html">front_extended_deque</a></span></dt>
<dt><span class="section"><a href="fusion/container/back_extended_deque.html">back_extended_deque</a></span></dt>
<dt><span class="section"><a href="fusion/container/set.html">set</a></span></dt>
<dt><span class="section"><a href="fusion/container/map.html">map</a></span></dt>
<dt><span class="section"><a href="fusion/container/generation.html">Generation</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/container/generation/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/container/generation/metafunctions.html">MetaFunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/container/conversion.html">Conversion</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/container/conversion/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/container/conversion/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/view.html">View</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/view/single_view.html">single_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/filter_view.html">filter_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/iterator_range.html">iterator_range</a></span></dt>
<dt><span class="section"><a href="fusion/view/joint_view.html">joint_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/zip_view.html">zip_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/transform_view.html">transform_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/reverse_view.html">reverse_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/nview.html">nview</a></span></dt>
<dt><span class="section"><a href="fusion/view/repetitive_view.html">repetitive_view</a></span></dt>
<dt><span class="section"><a href="fusion/view/flatten_view.html">flatten_view</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/adapted.html">Adapted</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/adapted/array.html">Array</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/std__pair.html">std::pair</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/mpl_sequence.html">mpl sequence</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/boost__array.html">boost::array</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/boost__tuple.html">boost::tuple</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_struct.html">BOOST_FUSION_ADAPT_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_tpl_struct.html">BOOST_FUSION_ADAPT_TPL_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_struct_named.html">BOOST_FUSION_ADAPT_STRUCT_NAMED</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_assoc.html">BOOST_FUSION_ADAPT_ASSOC_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_assoc_tpl_struct.html">BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_assoc_struct_named.html">BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_adt.html">BOOST_FUSION_ADAPT_ADT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_tpl_adt.html">BOOST_FUSION_ADAPT_TPL_ADT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_assoc_adt.html">BOOST_FUSION_ADAPT_ASSOC_ADT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/adapt_assoc_tpl_adt.html">BOOST_FUSION_ADAPT_ASSOC_TPL_ADT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_struct.html">BOOST_FUSION_DEFINE_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_tpl_struct.html">BOOST_FUSION_DEFINE_TPL_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_struct_inline.html">BOOST_FUSION_DEFINE_STRUCT_INLINE</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_tpl_struct_inline.html">BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_assoc_struct.html">BOOST_FUSION_DEFINE_ASSOC_STRUCT</a></span></dt>
<dt><span class="section"><a href="fusion/adapted/define_assoc_tpl_struct.html">BOOST_FUSION_DEFINE_ASSOC_TPL_STRUCT</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/algorithm.html">Algorithm</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/algorithm/auxiliary.html">Auxiliary</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/algorithm/auxiliary/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/algorithm/auxiliary/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/algorithm/iteration.html">Iteration</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/algorithm/iteration/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/algorithm/iteration/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/algorithm/query.html">Query</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/algorithm/query/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/algorithm/query/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/algorithm/transformation.html">Transformation</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/algorithm/transformation/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/algorithm/transformation/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/tuple.html">Tuple</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple.html">Class template tuple</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple/construction.html">Construction</a></span></dt>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple/tuple_creation_functions.html">Tuple
creation functions</a></span></dt>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple/tuple_helper_classes.html">Tuple
helper classes</a></span></dt>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple/element_access.html">Element
access</a></span></dt>
<dt><span class="section"><a href="fusion/tuple/class_template_tuple/relational_operators.html">Relational
operators</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/tuple/pairs.html">Pairs</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/extension.html">Extension</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/extension/ext_full.html">The Full Extension Mechanism</a></span></dt>
<dt><span class="section"><a href="fusion/extension/sequence_facade.html">Sequence Facade</a></span></dt>
<dt><span class="section"><a href="fusion/extension/iterator_facade.html">Iterator Facade</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/functional.html">Functional</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/functional/concepts.html">Concepts</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/functional/concepts/callable.html">Callable Object</a></span></dt>
<dt><span class="section"><a href="fusion/functional/concepts/reg_callable.html">Regular Callable
Object</a></span></dt>
<dt><span class="section"><a href="fusion/functional/concepts/def_callable.html">Deferred Callable
Object</a></span></dt>
<dt><span class="section"><a href="fusion/functional/concepts/poly.html">Polymorphic Function
Object</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/functional/invocation.html">Invocation</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/functional/invocation/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/functional/invocation/metafunctions.html">Metafunctions</a></span></dt>
<dt><span class="section"><a href="fusion/functional/invocation/limits.html">Limits</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/functional/adapters.html">Adapters</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/functional/adapters/fused.html">fused</a></span></dt>
<dt><span class="section"><a href="fusion/functional/adapters/fused_procedure.html">fused_procedure</a></span></dt>
<dt><span class="section"><a href="fusion/functional/adapters/fused_function_object.html">fused_function_object</a></span></dt>
<dt><span class="section"><a href="fusion/functional/adapters/unfused.html">unfused</a></span></dt>
<dt><span class="section"><a href="fusion/functional/adapters/unfused_typed.html">unfused_typed</a></span></dt>
<dt><span class="section"><a href="fusion/functional/adapters/limits.html">Limits</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/functional/generation.html">Generation</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/functional/generation/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/functional/generation/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/notes.html">Notes</a></span></dt>
<dt><span class="section"><a href="fusion/change_log.html">Change log</a></span></dt>
<dt><span class="section"><a href="fusion/acknowledgements.html">Acknowledgements</a></span></dt>
<dt><span class="section"><a href="fusion/references.html">References</a></span></dt>
</dl>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: May 10, 2013 at 05:54:18 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="fusion/preface.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
</body>
<head>
<!-- Copyright (C) 2002 Douglas Gregor <doug.gregor -at- 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) -->
<title>Redirect to generated documentation</title>
<meta http-equiv="refresh" content="0; URL=http://boost-sandbox.sourceforge.net/libs/fusion/doc/html/">
</head>
<body>
Automatic redirection failed, please go to
<a href="http://boost-sandbox.sourceforge.net/libs/fusion/doc/html/">http://boost-sandbox.sourceforge.net/libs/fusion/doc/html/</a>
</body>
</html>

View File

@ -494,7 +494,7 @@ Deferences the data property associated with the element referenced by an associ
template<
typename I
>
typename __result_of_deref_data__<I>::type deref_data(I const& i);
typename __result_of_deref_data__<I>::type deref(I const& i);
[table Parameters
[[Parameter] [Requirement] [Description]]
@ -513,7 +513,7 @@ Deferences the data property associated with the element referenced by an associ
#include <boost/fusion/include/deref_data.hpp>
[heading Example]
typedef __map__<__pair__<float, int&> > map;
typedef __map__<__pair__<float,int&> > map;
int i(0);
map m(1.0f,i);
@ -677,7 +677,7 @@ Returns the type stored at the position of an iterator.
[heading Description]
Returns the type that will be returned by dereferencing an iterator.
[heading Synopsis]
[heading Synposis]
template<
typename I
>
@ -721,7 +721,7 @@ Returns the type that will be returned by dereferencing an iterator.
[heading Description]
Returns the type of the next iterator in a sequence.
[heading Synopsis]
[heading Synposis]
template<
typename I
>
@ -1044,7 +1044,7 @@ Returns the type of the data property associated with the element referenced by
[heading Description]
Returns the type that will be returned by dereferencing the data property referenced by an associative iterator.
[heading Synopsis]
[heading Synposis]
template<
typename I
>
@ -1066,17 +1066,18 @@ Returns the type that will be returned by dereferencing the data property refere
[*Semantics]: Returns the result of dereferencing the data property referenced by an associative iterator of type `I`.
[heading Header]
#include <boost/fusion/iterator/deref_data.hpp>
#include <boosta/fusion/iterator/deref_data.hpp>
#include <boost/fusion/include/deref_data.hpp>
[heading Example]
typedef map<pair<float, int> > map_type;
typedef boost::fusion::result_of::begin<map_type>::type i_type;
typedef boost::fusion::result_of::deref_data<i_type>::type r_type;
BOOST_STATIC_ASSERT((boost::is_same<r_type, int&>::value));
typedef __map__<__pair__<float,int> > map;
typedef __result_of_begin__<vec>::type first;
BOOST_MPL_ASSERT((boost::is_same<__result_of_deref_data__<first>::type, int&>));
[endsect]
[endsect]
[endsect]

View File

@ -58,10 +58,10 @@ In the case:
[heading Extensibility]
Unlike __mpl__, there is no extensible sequence concept in fusion. This does
Unlike __mpl__, there is no extensibe sequence concept in fusion. This does
not mean that Fusion sequences are not extensible. In fact, all Fusion
sequences are inherently extensible. It is just that the manner of sequence
extension in Fusion is different from both __stl__ and __mpl__ on account of
extension in Fusion is diferent from both __stl__ and __mpl__ on account of
the lazy nature of fusion __algorithms__. __stl__ containers extend
themselves in place though member functions such as __push_back__ and
__insert__. __mpl__ sequences, on the other hand, are extended through

View File

@ -13,7 +13,7 @@
[heading Description]
Fusion is a library for working with heterogeneous collections of data,
Fusion is a library for working with heterogenous collections of data,
commonly referred to as tuples. A set of containers (vector, list, set and map)
is provided, along with views that provide a transformed presentation
of their underlying data. Collectively the containers and views are referred to
@ -31,7 +31,7 @@ Tuples are powerful beasts. After having developed two significant projects
(__spirit__ and __phoenix__) that relied heavily metaprogramming, it
became apparent that tuples are a powerful means to simplify otherwise tricky
tasks; especially those that require a combination of metaprogramming and
manipulation of heterogeneous data types with values. While __mpl__ is an
manipulation of heterogenous data types with values. While __mpl__ is an
extremely powerful metaprogramming tool, __mpl__ focuses on type
manipulation only. Ultimately, you'll have to map these types to real
values to make them useful in the runtime world where all the real action

View File

@ -1,7 +1,6 @@
[/==============================================================================
Copyright (C) 2001-2011 Joel de Guzman
Copyright (C) 2006 Dan Marsden
Copyright (C) 2014 Christoph Weiss
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
@ -143,8 +142,8 @@ __bidirectional_iterator__.
__forward_sequence__
[variablelist Notation
[[`s`] [A Bidirectional Sequence]]
[[`S`] [A Bidirectional Sequence type]]
[[`s`] [A Forward Sequence]]
[[`S`] [A Forward Sequence type]]
[[`o`] [An arbitrary object]]
[[`e`] [A Sequence element]]
]
@ -214,8 +213,7 @@ __bidirectional_sequence__
[variablelist Notation
[[`s`] [A Random Access Sequence]]
[[`S`] [A Random Access Sequence type]]
[[`M`] [An __mpl__ integral constant]]
[[`N`] [An integral constant]]
[[`N`] [An __mpl_integral_constant__]]
[[`o`] [An arbitrary object]]
[[`e`] [A Sequence element]]
]
@ -229,18 +227,12 @@ any Random Access Sequence the following must be met:
[[Expression] [Return type] [Type Requirements] [Runtime Complexity]]
[[`__begin__(s)`] [__random_access_iterator__] [] [Constant]]
[[`__end__(s)`] [__random_access_iterator__] [] [Constant]]
[[`__at_c__<N>(s)`] [Any type] [] [Constant]]
[[`__at_c__<N>(s) = o`] [Any type] [`s` is mutable and
[[`__at__<N>(s)`] [Any type] [] [Constant]]
[[`__at__<N>(s) = o`] [Any type] [`s` is mutable and
`e = o`, where `e`
is the first element
in the sequence, is
a valid expression.] [Constant]]
[[`__at__<M>(s)`] [Any type] [] [Constant]]
[[`__at__<M>(s) = o`] [Any type] [`s` is mutable and
`e = o`, where `e`
is the first element
in the sequence, is
a valid expression.] [Constant]]
a valid expression.] [Constant]]
]
[heading Result Type Expressions]
@ -266,8 +258,7 @@ are not defined in __bidirectional_sequence__.
[table
[[Expression] [Semantics]]
[[`__at__<M>(s)`] [The Mth element from the beginning of the sequence; see __at__.]]
[[`__at_c__<N>(s)`] [The Nth element from the beginning of the sequence; see __at_c__.]]
[[`__at__<N>(s)`] [The Nth element from the beginning of the sequence; see __at__.]]
]
[heading Models]
@ -292,7 +283,6 @@ An Associative Sequence allows efficient retrieval of elements based on keys.
Like associative sequences in __mpl__, and unlike associative containers in
__stl__, Fusion associative sequences have no implied ordering relation.
Instead, type identity is used to impose an equivalence relation on keys.
Keys are not checked for uniqueness.
[variablelist Notation
[[`s`] [An Associative Sequence]]
@ -541,7 +531,7 @@ Returns the first element in the sequence.
[*Return type]: Returns a reference to the first element in the sequence
`seq` if `seq` is mutable and `e = o`, where `e` is the first element in
the sequence, is a valid expression. Else, returns a type convertible to
the sequence, is a valid expression. Else, returns a type convertable to
the first element in the sequence.
[*Precondition]: `__empty__(seq) == false`
@ -589,7 +579,7 @@ Returns the last element in the sequence.
[*Return type]: Returns a reference to the last element in the sequence
`seq` if `seq` is mutable and `e = o`, where `e` is the last element in the
sequence, is a valid expression. Else, returns a type convertible to the
sequence, is a valid expression. Else, returns a type convertable to the
last element in the sequence.
[*Precondition]: `__empty__(seq) == false`
@ -652,15 +642,15 @@ in the sequence.
[heading Description]
Returns the M-th element from the beginning of the sequence.
Returns the N-th element from the beginning of the sequence.
[heading Synopsis]
template <typename M, typename Sequence>
template <typename N, typename Sequence>
typename __result_of_at__<Sequence, N>::type
at(Sequence& seq);
template <typename M, typename Sequence>
template <typename N, typename Sequence>
typename __result_of_at__<Sequence const, N>::type
at(Sequence const& seq);
@ -669,25 +659,25 @@ Returns the M-th element from the beginning of the sequence.
[table
[[Parameter] [Requirement] [Description]]
[[`seq`] [Model of __random_access_sequence__] [The sequence we wish to investigate.]]
[[`M`] [An __mpl_integral_constant__] [An index from the beginning of the
[[`N`] [An __mpl_integral_constant__] [An index from the beginning of the
sequence.]]
]
[heading Expression Semantics]
at<M>(seq);
at<N>(seq);
[*Return type]: Returns a reference to the M-th element from the beginning
of the sequence `seq` if `seq` is mutable and `e = o`, where `e` is the M-th
[*Return type]: Returns a reference to the N-th element from the beginning
of the sequence `seq` if `seq` is mutable and `e = o`, where `e` is the N-th
element from the beginning of the sequence, is a valid expression. Else,
returns a type convertible to the M-th element from the beginning of the
returns a type convertable to the N-th element from the beginning of the
sequence.
[*Precondition]: `0 <= M::value < __size__(s)`
[*Precondition]: `0 <= N::value < __size__(s)`
[*Semantics]: Equivalent to
__deref__(__advance__<M>(__begin__(s)))
__deref__(__advance__<N>(__begin__(s)))
[heading Header]
@ -733,7 +723,7 @@ Returns the N-th element from the beginning of the sequence.
[*Return type]: Returns a reference to the N-th element from the beginning
of the sequence `seq` if `seq` is mutable and `e = o`, where `e` is the N-th
element from the beginning of the sequence, is a valid expression. Else,
returns a type convertible to the N-th element from the beginning of the
returns a type convertable to the N-th element from the beginning of the
sequence.
[*Precondition]: `0 <= N < __size__(s)`
@ -828,7 +818,7 @@ Returns the element associated with a Key from the sequence.
[*Return type]: Returns a reference to the element associated with Key from
the sequence `seq` if `seq` is mutable and `e = o`, where `e` is the
element associated with Key, is a valid expression. Else, returns a type
convertible to the element associated with Key.
convertable to the element associated with Key.
[*Precondition]: `has_key<Key>(seq) == true`
@ -854,14 +844,13 @@ Performs an element by element swap of the elements in 2 sequences.
[heading Synopsis]
template<typename Seq1, typename Seq2>
typename __result_of_swap__<Seq1, Seq2>::type
swap(Seq1& seq1, Seq2& seq2);
void swap(Seq1& seq1, Seq2& seq2);
[heading Parameters]
[table
[[Parameters] [Requirement] [Description]]
[[`seq1`, `seq2`][Models of __forward_sequence__][The sequences whose elements we wish to swap.]]
[[`seq1`, `seq2`][Models of __forward_sequence__][The sequences whos elements we wish to swap.]]
]
[heading Expression Semantics]
@ -874,10 +863,7 @@ Performs an element by element swap of the elements in 2 sequences.
[*Semantics]: Calls `swap(a1, b1)` for corresponding elements in `seq1` and `seq2`.
[heading Header]
#include <boost/fusion/sequence/intrinsic/swap.hpp>
#include <boost/fusion/include/swap.hpp>
/sequence/intrinsic/swap.hpp>
[heading Example]
__vector__<int, std::string> v1(1, "hello"), v2(2, "world");
@ -1129,7 +1115,7 @@ the actual element type, use __result_of_value_at__].
[heading Synopsis]
template<
typename Seq,
typename M>
typename N>
struct at
{
typedef __unspecified__ type;
@ -1138,15 +1124,15 @@ the actual element type, use __result_of_value_at__].
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq`][A model of __random_access_sequence__][Argument sequence]]
[[`M`][An __mpl_integral_constant__][Index of element]]
[[`N`][An __mpl_integral_constant__][Index of element]]
]
[heading Expression Semantics]
result_of::at<Seq, M>::type
result_of::at<Seq, N>::type
[*Return type]: Any type.
[*Semantics]: Returns the result type of using __at__ to access the `M`th element of `Seq`.
[*Semantics]: Returns the result type of using __at__ to access the `N`th element of `Seq`.
[heading Header]
@ -1171,7 +1157,7 @@ get the actual element type, use __result_of_value_at_c__].
[heading Synopsis]
template<
typename Seq,
int N>
int M>
struct at_c
{
typedef __unspecified__ type;
@ -1180,15 +1166,15 @@ get the actual element type, use __result_of_value_at_c__].
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq`][A model of __random_access_sequence__][Argument sequence]]
[[`N`][Positive integer index][Index of element]]
[[`M`][Positive integer index][Index of element]]
]
[heading Expression Semantics]
result_of::at_c<Seq, N>::type
result_of::at_c<Seq, M>::type
[*Return type]: Any type
[*Semantics]: Returns the result type of using __at_c__ to access the `N`th element of `Seq`.
[*Semantics]: Returns the result type of using __at_c__ to access the `M`th element of `Seq`.
[heading Header]
@ -1210,7 +1196,7 @@ Returns the actual type at a given index from the __sequence__.
[heading Synopsis]
template<
typename Seq,
typename M>
typename N>
struct value_at
{
typedef __unspecified__ type;
@ -1219,15 +1205,15 @@ Returns the actual type at a given index from the __sequence__.
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq`][A model of __random_access_sequence__][Argument sequence]]
[[`M`][An __mpl_integral_constant__][Index of element]]
[[`N`][An __mpl_integral_constant__][Index of element]]
]
[heading Expression Semantics]
result_of::value_at<Seq, M>::type
result_of::value_at<Seq, N>::type
[*Return type]: Any type.
[*Semantics]: Returns the actual type at the `M`th element of `Seq`.
[*Semantics]: Returns the actual type at the `N`th element of `Seq`.
[heading Header]
@ -1249,7 +1235,7 @@ Returns the actual type at a given index from the __sequence__.
[heading Synopsis]
template<
typename Seq,
int N>
int M>
struct value_at_c
{
typedef __unspecified__ type;
@ -1258,15 +1244,15 @@ Returns the actual type at a given index from the __sequence__.
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq`][A model of __random_access_sequence__][Argument sequence]]
[[`N`][Positive integer index][Index of element]]
[[`M`][Positive integer index][Index of element]]
]
[heading Expression Semantics]
result_of::value_at_c<Seq, N>::type
result_of::value_at_c<Seq, M>::type
[*Return type]: Any type
[*Semantics]: Returns the actual type at the `N`th element of `Seq`.
[*Semantics]: Returns the actual type at the `M`th element of `Seq`.
[heading Header]
@ -1395,7 +1381,7 @@ Returns the actual element type associated with a Key from the __sequence__.
[heading Example]
typedef __map__<__pair__<int, char>, __pair__<char, char>, __pair__<double, char> > mymap;
BOOST_MPL_ASSERT((boost::is_same<__result_of_value_at_key__<mymap, int>::type, char>));
BOOST_MPL_ASSERT((boost::is_same<__result_of_at_key__<mymap, int>::type, char>));
[endsect]
@ -1419,10 +1405,9 @@ Returns the return type of swap.
[heading Expression Semantics]
result_of::swap<Seq1, Seq2>::type
[*Return type]: `void` iff both of `Seq1` and `Seq2` are sequence.
Otherwise, none.
[*Return type]: `void`.
[*Semantics]: Returns the return type of __swap__ for 2 sequences of types `Seq1` and `Seq2`.
[*Semantics]: Always returns `void`.
[heading Header]
@ -1493,7 +1478,7 @@ The code:
__vector__<int, int> j;
std::cin >> i;
std::cin >> tuple_open('[') >> tuple_close(']') >> tuple_delimiter(':');
std::cin >> set_open('[') >> set_close(']') >> set_delimiter(':');
std::cin >> j;
reads the data into the __vector__(s) `i` and `j`.
@ -1902,91 +1887,6 @@ compile time error.
[endsect]
[section Hashing]
Automatically create a `boost::hash` conforming `hash_value` function.
[heading Synopsis]
template <typename Seq>
std::size_t
hash_value(Seq const& seq);
[heading Parameters]
[table
[[Parameter] [Requirement] [Description]]
[[`seq`] [Instance of __sequence__] [__sequence__ to compute hash value of]]
]
[*Return type]: `std::size_t`
[*Requirements]:
For each element `e` in sequence `seq`, `hash_value(seq)` is a valid expression
returning a type that is convertible to `std::size_t`.
[*Semantics]: Returns a combined hash value for all elements of `seq`.
[heading Header]
#include <boost/fusion/sequence/hash.hpp>
#include <boost/fusion/include/hash.hpp>
[heading Example]
#include <boost/fusion/include/equal_to.hpp>
#include <boost/fusion/include/hash.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/unordered_map.hpp>
void foo()
{
typedef boost::fusion::vector<int, std::string, char> Vec;
const Vec v = {42, "Hello World", 't'};
// Compute a hash value directly.
std::cout << "hash_value(v) = " << boost::fusion::hash_value(v) << '\n';
// Or use it to create an unordered_map.
boost::unordered_map<Vec, bool> map;
map[v] = true;
assert(map.size() == 1 && map.count(v) == 1);
}
[heading Example]
#include <boost/fusion/include/define_struct.hpp>
#include <boost/fusion/include/equal_to.hpp>
#include <boost/fusion/include/hash.hpp>
#include <boost/unordered_set.hpp>
// We would like to define a struct that we can form unordered_sets of.
BOOST_FUSION_DEFINE_STRUCT(
(demo), Key,
(bool, b)
(std::string, s)
(int, i)
)
namespace demo {
// Make operator== and hash_value ADL accessible.
using boost::fusion::operator==;
using boost::fusion::hash_value;
typedef boost::unordered_set<demo::Key> Set;
}
void foo()
{
demo::Set set;
demo::Key key;
assert(set.count(key) == 0);
}
[heading See also]
__boost_func_hash__
[endsect]
[endsect]
[endsect]

View File

@ -16,7 +16,7 @@ A couple of classes and metafunctions provide basic support for Fusion.
Metafunction that evaluates to `mpl::true_` if a certain type `T` is a
conforming Fusion __sequence__, `mpl::false_` otherwise. This may be
specialized to accommodate clients which provide Fusion conforming sequences.
specialized to accomodate clients which provide Fusion conforming sequences.
[heading Synopsis]
@ -70,7 +70,7 @@ conforming Fusion __view__, `mpl::false_` otherwise. A view is a
specialized sequence that does not actually contain data. Views hold
sequences which may be other views. In general, views are held by other
views by value, while non-views are held by other views by reference. `is_view`
may be specialized to accommodate clients providing Fusion conforming views.
may be specialized to accomodate clients providing Fusion conforming views.
[heading Synopsis]
@ -125,7 +125,7 @@ All conforming Fusion sequences and iterators have an associated tag type. The
purpose of the tag is to enable __tag_dispatching__ from __intrinsic__
functions to implementations appropriate for the type.
This metafunction may be specialized to accommodate clients providing Fusion
This metafunction may be specialized to accomodate clients providing Fusion
conforming sequences.
[heading Synopsis]

View File

@ -23,21 +23,6 @@ As such the fusion tuple type provides a lot of functionality beyond that requir
Currently tuple is basically a synonym for __vector__, although this may be changed
in future releases of fusion.
[heading Header]
#include <boost/fusion/tuple.hpp>
#include <boost/fusion/include/tuple.hpp>
#include <boost/fusion/tuple/tuple.hpp>
#include <boost/fusion/tuple/tuple_fwd.hpp>
#include <boost/fusion/include/tuple_fwd.hpp>
// for creation function
#include <boost/fusion/tuple/tuple_tie.hpp>
#include <boost/fusion/include/tuple_tie.hpp>
#include <boost/fusion/tuple/make_tuple.hpp>
#include <boost/fusion/include/make_tuple.hpp>
[heading Synopsis]
template<
typename T1 = __unspecified__,
@ -46,6 +31,8 @@ in future releases of fusion.
typename TN = __unspecified__>
class tuple;
/tuple.hpp>
[section Construction]
[heading Description]
@ -62,7 +49,7 @@ The __tr1__tuple__ type provides a default constructor, a constructor that takes
tuple();
[*Requirements]: Each `Ti` is default-constructible.
[*Requirements]: Each `Ti` is default constructable.
[*Semantics]: Default initializes each element of the tuple.
@ -74,7 +61,7 @@ The __tr1__tuple__ type provides a default constructor, a constructor that takes
tuple(const tuple& t);
[*Requirements]: Each `Ti` should be copy-constructible.
[*Requirements]: Each `Ti` should be copy constructable.
[*Semantics]: Copy constructs each element of `*this` with the corresponding element of `t`.
@ -90,23 +77,21 @@ The __tr1__tuple__ type provides a default constructor, a constructor that takes
[section Tuple creation functions]
[heading Description]
TR1 describes 2 utility functions for creating __tr1__tuple__. `make_tuple` builds a tuple out of it's argument list, and `tie` builds a tuple of references to it's arguments. The details of these creation functions are described in this section.
TR1 describes 2 utility functions for creating __tr1__tuple__s. `make_tuple` builds a tuple out of it's argument list, and `tie` builds a tuple of references to it's arguments. The details of these creation functions are described in this section.
[heading Specification]
template<typename T1, typename T2, ..., typename TN>
tuple<V1, V2, ..., VN>
make_tuple(const T1& t1, const T2& t2, ..., const TN& tn);
tuple<V1, V2, ..., VN> make_tuple(const T1& t1, const T2& t2, ..., const TN& tn);
Where `Vi` is `X&` if the cv-unqualified type `Ti` is `reference_wrapper<X>`, otherwise `Vi` is `Ti`.
[*Returns]: `tuple<V1, V2, ..., VN>(t1, t2, ..., tN)`
template<typename T1, typename T2, ..., typename TN>
tuple<T1&, T2&, ..., TN&>
tie(T1& t1, T2& t2, ..., TN& tn);
tuple<T1&, T2&, ..., TN&> tie(T1& t1, T2& t2, ..., TN& tn);
[*Returns]: tuple<T1&, T2&, ..., TN&>(t1, t2, ..., tN). When argument `ti` is `ignore`, assigning any value to the corresponding tuple element has no effect.
[*Returns]: tuple<T1&, T2&, ..., TN&>(t1, t2, ..., tN). When argument `ti` is `ignore`, assigning any value to the corresponding tuple element has has no effect.
[endsect]
@ -269,7 +254,7 @@ The __tr1__tuple__ interface is specified to provide uniform access to `std::pai
[*Type]: `T2`
[*Value]: Returns the type of the second element of the pair
[*Value]: Returns thetype of the second element of the pair
template<int I, typename T1, typename T2>
P& get(std::pair<T1, T2>& pr);

View File

@ -484,7 +484,7 @@ defined in the implemented models.
[heading Description]
`nview` presents a view which iterates over a given __sequence__ in a specified order.
An `nview` is constructed from an arbitrary __sequence__ and a list of indices specifying
An `nview` is constructed from an arbitrary __sequence__ and a list of indicies specifying
the elements to iterate over.
[heading Header]
@ -494,7 +494,7 @@ the elements to iterate over.
[heading Synopsis]
template <typename Sequence, typename Indices>
template <typename Sequence, typename Indicies>
struct nview;
template <typename Sequence, int I1, int I2 = -1, ...>
@ -507,7 +507,7 @@ the elements to iterate over.
[[Parameter] [Description] [Default]]
[[`Sequence`] [An arbitrary Fusion __forward_sequence__]
[]]
[[`Indices`] [A `mpl::vector_c<int, ...>` holding the indices defining
[[`Indicies`] [A `mpl::vector_c<int, ...>` holding the indicies defining
the required iteration order.] []]
[[`I1`, `I2`, `I3`...] [A list of integers specifying the required
iteration order.] [`INT_MAX` for `I2`, `I3`...]]
@ -530,7 +530,7 @@ defined in __random_access_sequence__.
[table
[[Expression] [Semantics]]
[[`NV(s)`] [Creates an `nview` given a sequence and a list of indices.]]
[[`NV(s)`] [Creates an `nview` given a sequence and a list of indicies.]]
[[`NV(nv1)`] [Copy constructs an `nview` from another `nview`, `nv1`.]]
[[`nv1 = nv2`] [Assigns to an `nview`, `nv1`, from another `nview`, `nv2`.]]
]
@ -540,15 +540,16 @@ of the original Fusion __sequence__
[heading Example]
typedef __vector__<int, char, double> vec;
typedef mpl::vector_c<int, 2, 1, 0, 2, 0> indices;
typedef mpl::vector_c<int, 2, 1, 0, 2, 0> indicies;
vec v1(1, 'c', 2.0);
std::cout << nview<vec, indices>(v1) << std::endl; // (2.0 c 1 2.0 1)
std::cout << nview<vec, indicies>(v1) << std::endl; // (2.0 c 1 2.0 1)
std::cout << as_nview<2, 1, 1, 0>(v1) << std::endl; // (2.0 c c 1)
[endsect]
[section repetitive_view]
[heading Description]
@ -592,7 +593,7 @@ printing a `repetitive_view` to `std::cout` is not.
[[`RV(rv1)`] [] [Copy constructs an `repetitive_view` from another `repetitive_view`, `rv1`.]]
[[`rv1 = rv2`] [] [Assigns to a `repetitive_view`, `rv1`, from another `repetitive_view`, `rv2`.]]
[[`__begin__(rv)`] [__forward_iterator__] []]
[[`__end__(rv)`] [__forward_iterator__] [Creates an unreachable iterator (since the sequence is infinite)]]
[[`__end__(rv)`] [__forward_iterator__] [Creates an unreachable iterator (since the sequnce is infinite)]]
]
[heading Result Type Expressions]
@ -614,58 +615,4 @@ printing a `repetitive_view` to `std::cout` is not.
[endsect]
[section flatten_view]
[heading Description]
`flatten_view` presents a view which iterates over its elements recursively in depth-first order.
[heading Header]
#include <boost/fusion/view/flatten_view.hpp>
#include <boost/fusion/include/flatten_view.hpp>
[heading Synopsis]
template <typename Sequence>
struct flatten_view;
[heading Template parameters]
[table
[[Parameter] [Description] [Default]]
[[`Sequence`] [A __forward_sequence__] []]
]
[heading Model of]
* __forward_sequence__
[variablelist Notation
[[`F`] [A `flatten_view` type]]
[[`s`] [An instance of `Sequence`]]
[[`f`, `f2`] [Instances of `F`]]
]
[heading Expression Semantics]
Semantics of an expression is defined only where it differs from, or is not
defined in __forward_sequence__.
[table
[[Expression] [Semantics]]
[[`F(s)`] [Creates a `flatten_view` given sequence, `s`.]]
[[`F(f)`] [Copy constructs a `flatten_view` from another `flatten_view`, `f`.]]
[[`f = f2`] [Assigns to a `flatten_view`, `f`, from another `flatten_view`, `f2`.]]
]
[heading Example]
typedef __vector__<int, int, __vector__<int, int>, int> sequence_type;
sequence_type seq;
__flatten_view__<sequence_type> flattened(seq);
__copy__(__make_vector__(1, 2, 3, 4, 5), flattened);
assert(seq == __make_vector__(1, 2, __make_vector__(3, 4), 5));
[endsect]
[endsect]

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_ADAPTED_30122005_1420)
#define BOOST_FUSION_ADAPTED_30122005_1420
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt.hpp>
#include <boost/fusion/adapted/array.hpp>
#include <boost/fusion/adapted/boost_array.hpp>
@ -19,7 +18,7 @@
// The std_tuple_iterator adaptor only supports implementations
// using variadic templates
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
#include <boost/fusion/adapted/std_tuple.hpp>
#endif

View File

@ -10,7 +10,6 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_HPP
#define BOOST_FUSION_ADAPTED_ADT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt_named.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
#include <boost/fusion/adapted/adt/adapt_adt_named.hpp>

View File

@ -2,7 +2,6 @@
Copyright (c) 2001-2009 Joel de Guzman
Copyright (c) 2009-2010 Hartmut Kaiser
Copyright (c) 2010-2011 Christopher Schmidt
Copyright (c) 2013-2014 Damien Buhl
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)
@ -11,12 +10,8 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/comparison/equal.hpp>
#include <boost/preprocessor/comparison/less.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/add_const.hpp>
@ -26,7 +21,6 @@
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
#include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
#include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
@ -37,21 +31,17 @@
#include <boost/fusion/adapted/struct/detail/deref_impl.hpp>
#include <boost/fusion/adapted/adt/detail/extension.hpp>
#include <boost/fusion/adapted/adt/detail/adapt_base.hpp>
#include <boost/fusion/adapted/adt/detail/adapt_base_attr_filler.hpp>
#define BOOST_FUSION_ADAPT_ADT_C( \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, IS_VIEW, I, ATTRIBUTE) \
BOOST_FUSION_ADAPT_ADT_C_BASE( \
TEMPLATE_PARAMS_SEQ, \
NAME_SEQ, \
I, \
BOOST_PP_IF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE), \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
BOOST_PP_IF( \
BOOST_PP_LESS( \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), 4) \
, 1, 0))
#define BOOST_FUSION_ADAPT_ADT_FILLER_0(A, B, C, D)\
((A, B, C, D)) BOOST_FUSION_ADAPT_ADT_FILLER_1
#define BOOST_FUSION_ADAPT_ADT_FILLER_1(A, B, C, D)\
((A, B, C, D)) BOOST_FUSION_ADAPT_ADT_FILLER_0
#define BOOST_FUSION_ADAPT_ADT_FILLER_0_END
#define BOOST_FUSION_ADAPT_ADT_FILLER_1_END
#define BOOST_FUSION_ADAPT_ADT_C(TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE) \
BOOST_FUSION_ADAPT_ADT_C_BASE( \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE, 4)
#define BOOST_FUSION_ADAPT_TPL_ADT(TEMPLATE_PARAMS_SEQ, NAME_SEQ , ATTRIBUTES) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \

View File

@ -10,7 +10,6 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_NAMED_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ADT_NAMED_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_adt.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>

View File

@ -2,7 +2,6 @@
Copyright (c) 2001-2009 Joel de Guzman
Copyright (c) 2007 Dan Marsden
Copyright (c) 2010-2011 Christopher Schmidt
Copyright (c) 2013-2014 Damien Buhl
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)
@ -11,7 +10,6 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
@ -23,7 +21,6 @@
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
#include <boost/fusion/adapted/struct/detail/value_at_impl.hpp>
#include <boost/fusion/adapted/struct/detail/category_of_impl.hpp>
@ -37,29 +34,25 @@
#include <boost/fusion/adapted/struct/detail/value_of_data_impl.hpp>
#include <boost/fusion/adapted/adt/detail/extension.hpp>
#include <boost/fusion/adapted/adt/detail/adapt_base.hpp>
#include <boost/fusion/adapted/adt/detail/adapt_base_assoc_attr_filler.hpp>
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(A, B, C, D, E)\
((A, B, C, D, E)) BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1(A, B, C, D, E)\
((A, B, C, D, E)) BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0_END
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1_END
#define BOOST_FUSION_ADAPT_ASSOC_ADT_C( \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, IS_VIEW, I, ATTRIBUTE) \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE) \
\
BOOST_FUSION_ADAPT_ADT_C_BASE( \
TEMPLATE_PARAMS_SEQ, \
NAME_SEQ, \
I, \
BOOST_PP_IF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE), \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
BOOST_PP_IF( \
BOOST_PP_LESS( \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), 5) \
, 1, 0)) \
BOOST_FUSION_ADAPT_ADT_C_BASE(TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,ATTRIBUTE,5) \
\
template< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
> \
struct struct_assoc_key<BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ), I> \
{ \
typedef BOOST_FUSION_ADAPT_ASSOC_ADT_WRAPPEDATTR_GET_KEY(ATTRIBUTE) type;\
typedef BOOST_PP_TUPLE_ELEM(5, 4, ATTRIBUTE) type; \
};
#define BOOST_FUSION_ADAPT_ASSOC_TPL_ADT( \

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_NAMED_HPP
#define BOOST_FUSION_ADAPTED_ADT_ADAPT_ASSOC_ADT_NAMED_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>

View File

@ -10,19 +10,11 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_HPP
#define BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_auto.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_is_tpl.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/seq/seq.hpp>
#include <boost/preprocessor/seq/elem.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/typeof/typeof.hpp>
#define BOOST_FUSION_ADAPT_ADT_GET_IDENTITY_TEMPLATE_IMPL(TEMPLATE_PARAMS_SEQ) \
typename detail::get_identity< \
@ -35,72 +27,8 @@
\
boost::remove_const<boost::remove_reference<lvalue>::type>::type
#define BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR(ATTRIBUTE, \
ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE) \
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, \
BOOST_PP_IF(DEDUCE_TYPE, 0, 2), ATTRIBUTE)
#define BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_SETEXPR(ATTRIBUTE, \
ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE) \
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, \
BOOST_PP_IF(DEDUCE_TYPE, 1, 3), ATTRIBUTE)
#ifdef BOOST_MSVC
# define BOOST_FUSION_DEDUCED_ATTR_TYPE(NAME_SEQ, ATTRIBUTE, \
ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
\
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
TEMPLATE_PARAMS_SEQ) \
\
struct deduced_attr_type { \
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
typedef \
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ),typename,) \
BOOST_TYPEOF( PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR( \
ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, 1)) type; \
};
#else
# define BOOST_FUSION_DEDUCED_ATTR_TYPE(NAME_SEQ, ATTRIBUTE, \
ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
struct deduced_attr_type { \
static const BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj; \
typedef BOOST_TYPEOF( PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR( \
ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, 1)) type; \
};
#endif
#define BOOST_FUSION_ADT_ATTRIBUTE_TYPEOF( \
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
\
BOOST_FUSION_DEDUCED_ATTR_TYPE( \
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
\
typedef \
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ),typename,) \
boost::remove_const< \
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ),typename,) \
deduced_attr_type::type \
>::type type; \
\
typedef \
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ),typename,) \
boost::add_const< \
BOOST_PP_IF(BOOST_FUSION_ADAPT_IS_TPL(TEMPLATE_PARAMS_SEQ),typename,) \
deduced_attr_type::type \
>::type const_type;
#define BOOST_FUSION_ADT_ATTRIBUTE_GIVENTYPE( \
NAME_SEQ, ATTRIBUTE, ATTRIBUTE_TUPEL_SIZE, PREFIX, TEMPLATE_PARAMS_SEQ) \
\
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) type; \
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE) const_type;
#define BOOST_FUSION_ADAPT_ADT_C_BASE( \
TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,PREFIX, \
ATTRIBUTE,ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE) \
TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,ATTRIBUTE,ATTRIBUTE_TUPEL_SIZE) \
\
template< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
@ -110,43 +38,27 @@
, I \
> \
{ \
\
BOOST_PP_IF(DEDUCE_TYPE, \
BOOST_FUSION_ADT_ATTRIBUTE_TYPEOF, \
BOOST_FUSION_ADT_ATTRIBUTE_GIVENTYPE)( \
NAME_SEQ, \
ATTRIBUTE, \
ATTRIBUTE_TUPEL_SIZE, \
PREFIX, \
TEMPLATE_PARAMS_SEQ) \
\
template<class Val> \
BOOST_FUSION_GPU_ENABLED \
static void \
boost_fusion_adapt_adt_impl_set( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj, \
Val const& val) \
{ \
PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_SETEXPR(ATTRIBUTE, \
ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE); \
BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 3, ATTRIBUTE); \
} \
\
BOOST_FUSION_GPU_ENABLED \
static type \
static BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) \
boost_fusion_adapt_adt_impl_get( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& obj) \
{ \
return PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR(ATTRIBUTE, \
ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE); \
return BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 2, ATTRIBUTE); \
} \
\
BOOST_FUSION_GPU_ENABLED \
static const_type \
static BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE) \
boost_fusion_adapt_adt_impl_get( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const& obj) \
{ \
return PREFIX() BOOST_FUSION_ADAPT_ADT_ATTRIBUTE_GETEXPR(ATTRIBUTE, \
ATTRIBUTE_TUPEL_SIZE, DEDUCE_TYPE); \
return BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 2, ATTRIBUTE); \
} \
}; \
\
@ -159,21 +71,14 @@
, true \
> \
{ \
typedef \
BOOST_PP_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), typename, ) \
access::adt_attribute_access< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
, I \
>::const_type type; \
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 1, ATTRIBUTE) type; \
\
BOOST_FUSION_GPU_ENABLED \
explicit \
adt_attribute_proxy( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) const& o) \
: obj(&o) \
{} \
\
BOOST_FUSION_GPU_ENABLED \
type get() const \
{ \
return access::adt_attribute_access< \
@ -182,7 +87,6 @@
>::boost_fusion_adapt_adt_impl_get(*obj); \
} \
\
BOOST_FUSION_GPU_ENABLED \
operator type() const \
{ \
return get(); \
@ -200,14 +104,8 @@
, false \
> \
{ \
typedef \
BOOST_PP_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), typename, ) \
access::adt_attribute_access< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
, I \
>::type type; \
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) type; \
\
BOOST_FUSION_GPU_ENABLED \
explicit \
adt_attribute_proxy( \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ)& o) \
@ -215,7 +113,6 @@
{} \
\
template<class Val> \
BOOST_FUSION_GPU_ENABLED \
adt_attribute_proxy& \
operator=(Val const& val) \
{ \
@ -226,7 +123,6 @@
return *this; \
} \
\
BOOST_FUSION_GPU_ENABLED \
type get() const \
{ \
return access::adt_attribute_access< \
@ -235,7 +131,6 @@
>::boost_fusion_adapt_adt_impl_get(*obj); \
} \
\
BOOST_FUSION_GPU_ENABLED \
operator type() const \
{ \
return get(); \
@ -252,13 +147,7 @@
, I \
> \
{ \
typedef BOOST_PP_IF(BOOST_PP_SEQ_HEAD(TEMPLATE_PARAMS_SEQ), typename, ) \
adt_attribute_proxy< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ) \
, I \
, false \
>::type lvalue; \
\
typedef BOOST_PP_TUPLE_ELEM(ATTRIBUTE_TUPEL_SIZE, 0, ATTRIBUTE) lvalue; \
BOOST_FUSION_ADAPT_STRUCT_MSVC_REDEFINE_TEMPLATE_PARAMS( \
TEMPLATE_PARAMS_SEQ) \
\
@ -281,7 +170,6 @@
> \
type; \
\
BOOST_FUSION_GPU_ENABLED \
static type \
call(Seq& obj) \
{ \

View File

@ -1,61 +0,0 @@
/*=============================================================================
Copyright (c) 2013-2014 Damien Buhl
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_FUSION_ADAPTER_ADT_DETAIL_ADAPT_BASE_ASSOC_ATTR_FILLER_HPP
#define BOOST_FUSION_ADAPTER_ADT_DETAIL_ADAPT_BASE_ASSOC_ATTR_FILLER_HPP
#include <boost/config.hpp>
#include <boost/fusion/adapted/adt/detail/adapt_base_attr_filler.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/variadic/size.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/facilities/is_empty.hpp>
#if BOOST_PP_VARIADICS
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(...) \
BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(__VA_ARGS__) \
BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1(...) \
BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(__VA_ARGS__) \
BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0
#define BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(...) \
((BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)))
#else // BOOST_PP_VARIADICS
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0(A, B, C, D, E) \
BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(A, B, C, D, E) \
BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1(A, B, C, D, E) \
BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(A, B, C, D, E) \
BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0
#define BOOST_FUSION_ADAPT_ASSOC_ADT_WRAP_ATTR(A, B, C, D, E) \
BOOST_PP_IF(BOOST_PP_IS_EMPTY(A), \
((3, (C,D,E))), \
((5, (A,B,C,D,E))) \
)
#endif // BOOST_PP_VARIADICS
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_0_END
#define BOOST_FUSION_ADAPT_ASSOC_ADT_FILLER_1_END
#define BOOST_FUSION_ADAPT_ASSOC_ADT_WRAPPEDATTR_GET_KEY(ATTRIBUTE) \
BOOST_PP_TUPLE_ELEM( \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
BOOST_PP_SUB(BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE), 1), \
BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE))
#endif

View File

@ -1,90 +0,0 @@
/*=============================================================================
Copyright (c) 2013-2014 Damien Buhl
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_ATTR_FILLER_HPP
#define BOOST_FUSION_ADAPTED_ADT_DETAIL_ADAPT_BASE_ATTR_FILLER_HPP
#include <boost/config.hpp>
#include <boost/fusion/adapted/struct/detail/preprocessor/is_seq.hpp>
#include <boost/preprocessor/arithmetic/sub.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/logical/or.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/tuple/size.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/facilities/is_empty.hpp>
#include <boost/preprocessor/variadic/to_seq.hpp>
#include <boost/preprocessor/variadic/to_tuple.hpp>
#include <boost/preprocessor/variadic/elem.hpp>
#include <boost/preprocessor/seq/for_each.hpp>
#include <boost/preprocessor/seq/push_front.hpp>
#include <boost/preprocessor/seq/rest_n.hpp>
#include <boost/preprocessor/tuple/reverse.hpp>
#define BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR_SIZE(ATTRIBUTE) \
BOOST_PP_TUPLE_ELEM(2, 0, ATTRIBUTE)
#define BOOST_FUSION_ADAPT_ADT_WRAPPEDATTR(ATTRIBUTE) \
BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE)
#if BOOST_PP_VARIADICS
# define BOOST_FUSION_ADAPT_ADT_FILLER_0(...) \
BOOST_FUSION_ADAPT_ADT_FILLER(__VA_ARGS__) \
BOOST_FUSION_ADAPT_ADT_FILLER_1
# define BOOST_FUSION_ADAPT_ADT_FILLER_1(...) \
BOOST_FUSION_ADAPT_ADT_FILLER(__VA_ARGS__) \
BOOST_FUSION_ADAPT_ADT_FILLER_0
# define BOOST_FUSION_ADAPT_ADT_FILLER_0_END
# define BOOST_FUSION_ADAPT_ADT_FILLER_1_END
# define BOOST_FUSION_ADAPT_ADT_FILLER(...) \
BOOST_PP_IF( \
BOOST_PP_OR( \
BOOST_PP_IS_EMPTY(BOOST_PP_VARIADIC_ELEM(0, __VA_ARGS__)), \
BOOST_PP_IS_EMPTY(BOOST_PP_VARIADIC_ELEM(1, __VA_ARGS__))), \
BOOST_FUSION_ADAPT_ADT_WRAP_ATTR( \
BOOST_PP_VARIADIC_ELEM(2, __VA_ARGS__), \
BOOST_FUSION_WORKAROUND_VARIADIC_EMPTINESS_LAST_ELEM(__VA_ARGS__) \
), \
BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(__VA_ARGS__))
# define BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(...) \
((BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), (__VA_ARGS__)))
# define BOOST_FUSION_WORKAROUND_VARIADIC_EMPTINESS_LAST_ELEM(...) \
BOOST_PP_SEQ_HEAD(BOOST_PP_SEQ_REST_N( \
BOOST_PP_SUB(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), 1), \
BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)))
#else // BOOST_PP_VARIADICS
# define BOOST_FUSION_ADAPT_ADT_FILLER_0(A, B, C, D) \
BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(A,B,C,D) \
BOOST_FUSION_ADAPT_ADT_FILLER_1
# define BOOST_FUSION_ADAPT_ADT_FILLER_1(A, B, C, D) \
BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(A,B,C,D) \
BOOST_FUSION_ADAPT_ADT_FILLER_0
# define BOOST_FUSION_ADAPT_ADT_FILLER_0_END
# define BOOST_FUSION_ADAPT_ADT_FILLER_1_END
# define BOOST_FUSION_ADAPT_ADT_WRAP_ATTR(A, B, C, D) \
BOOST_PP_IF(BOOST_PP_IS_EMPTY(A), \
((2, (C,D))), \
((4, (A,B,C,D))) \
)
#endif // BOOST_PP_VARIADICS
#endif

View File

@ -10,32 +10,15 @@
#ifndef BOOST_FUSION_ADAPTED_ADT_DETAIL_EXTENSION_HPP
#define BOOST_FUSION_ADAPTED_ADT_DETAIL_EXTENSION_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/fusion/support/as_const.hpp>
#include <boost/fusion/adapted/struct/detail/extension.hpp>
namespace boost { namespace fusion
{
namespace detail
{
template <typename T, typename Dummy>
struct get_identity
: remove_const<typename remove_reference<T>::type>
{};
}
namespace extension
{
// Overload as_const() to unwrap adt_attribute_proxy.
template <typename T, int N, bool Const>
BOOST_FUSION_GPU_ENABLED
typename adt_attribute_proxy<T, N, Const>::type as_const(const adt_attribute_proxy<T, N, Const>& proxy)
{
return proxy.get();
}
}
}}
namespace boost { namespace fusion { namespace detail
{
template <typename T, typename Dummy>
struct get_identity
: remove_const<typename remove_reference<T>::type>
{};
}}}
#endif

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_AT_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_AT_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/remove_extent.hpp>
@ -27,7 +26,6 @@ namespace boost { namespace fusion { namespace extension
add_reference<typename remove_extent<Seq>::type>::type
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_BEGIN_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_BEGIN_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/basic_iterator.hpp>
namespace boost { namespace fusion { namespace extension
@ -31,7 +30,6 @@ namespace boost { namespace fusion { namespace extension
>
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_DEREF_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_DEREF_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/remove_extent.hpp>
@ -29,7 +28,6 @@ namespace boost { namespace fusion { namespace extension
>::type
type;
BOOST_FUSION_GPU_ENABLED
static type
call(It const& it)
{

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_END_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_END_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/basic_iterator.hpp>
#include <boost/type_traits/rank.hpp>
#include <boost/type_traits/extent.hpp>
@ -33,7 +32,6 @@ namespace boost { namespace fusion { namespace extension
>
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_IS_SEQUENCE_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_IS_SEQUENCE_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion { namespace extension

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_IS_VIEW_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_IS_VIEW_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion { namespace extension

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_SIZE_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_SIZE_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/rank.hpp>
#include <boost/type_traits/extent.hpp>

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_TAG_OF_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_TAG_OF_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
#include <cstddef>

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_VALUE_AT_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_VALUE_AT_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_extent.hpp>
namespace boost { namespace fusion { namespace extension

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_ARRAY_VALUE_OF_IMPL_HPP
#define BOOST_FUSION_ADAPTED_ARRAY_VALUE_OF_IMPL_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/remove_extent.hpp>
namespace boost { namespace fusion { namespace extension

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_BOOST_ARRAY_27122005_1035)
#define BOOST_FUSION_BOOST_ARRAY_27122005_1035
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_array/array_iterator.hpp>
#include <boost/fusion/adapted/boost_array/tag_of.hpp>
#include <boost/fusion/adapted/boost_array/detail/is_view_impl.hpp>

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_ARRAY_ITERATOR_26122005_2250)
#define BOOST_FUSION_ARRAY_ITERATOR_26122005_2250
#include <boost/fusion/support/config.hpp>
#include <cstddef>
#include <boost/config.hpp>
#include <boost/mpl/int.hpp>
@ -32,7 +31,6 @@ namespace boost { namespace fusion
typedef mpl::int_<Pos> index;
typedef Array array_type;
BOOST_FUSION_GPU_ENABLED
array_iterator(Array& a)
: array(a) {}
@ -57,7 +55,6 @@ namespace boost { namespace fusion
>::type
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const & it)
{
@ -72,7 +69,6 @@ namespace boost { namespace fusion
typedef typename Iterator::array_type array_type;
typedef array_iterator<array_type, index::value + N::value> type;
BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@ -95,7 +91,6 @@ namespace boost { namespace fusion
>::type
type;
BOOST_FUSION_GPU_ENABLED
static type
call(I1 const&, I2 const&)
{

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_AT_IMPL_27122005_1241)
#define BOOST_FUSION_AT_IMPL_27122005_1241
#include <boost/fusion/support/config.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/mpl/if.hpp>
@ -33,7 +32,6 @@ namespace boost { namespace fusion {
typename Sequence::const_reference,
typename Sequence::reference>::type type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_27122005_1117)
#define BOOST_FUSION_BEGIN_IMPL_27122005_1117
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_array/array_iterator.hpp>
namespace boost { namespace fusion {
@ -28,7 +27,6 @@ namespace boost { namespace fusion {
{
typedef array_iterator<Sequence, 0> type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_27122005_1044)
#define BOOST_FUSION_CATEGORY_OF_IMPL_27122005_1044
#include <boost/fusion/support/config.hpp>
#include <boost/config/no_tr1/utility.hpp>
namespace boost { namespace fusion {

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_END_IMPL_27122005_1120)
#define BOOST_FUSION_END_IMPL_27122005_1120
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_array/array_iterator.hpp>
namespace boost { namespace fusion {
@ -28,7 +27,6 @@ namespace boost { namespace fusion {
{
typedef array_iterator<Sequence, Sequence::static_size> type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_27122005_1648)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_27122005_1648
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion {

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_27042006_2221)
#define BOOST_FUSION_IS_VIEW_IMPL_27042006_2221
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -8,7 +8,6 @@
#if !defined(FUSION_SEQUENCE_TAG_OF_27122005_1030)
#define FUSION_SEQUENCE_TAG_OF_27122005_1030
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
#include <cstddef>

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_BOOST_TUPLE_09272006_0732)
#define BOOST_FUSION_BOOST_TUPLE_09272006_0732
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_tuple/tag_of.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/is_sequence_impl.hpp>
@ -17,7 +16,5 @@
#include <boost/fusion/adapted/boost_tuple/detail/size_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/at_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/value_at_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/convert_impl.hpp>
#include <boost/fusion/adapted/boost_tuple/mpl/clear.hpp>
#endif

View File

@ -7,7 +7,6 @@
#if !defined(FUSION_BOOST_TUPLE_ITERATOR_09262006_1851)
#define FUSION_BOOST_TUPLE_ITERATOR_09262006_1851
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/add_const.hpp>
@ -42,19 +41,12 @@ namespace boost { namespace fusion
struct boost_tuple_is_empty<tuples::tuple<> const> : mpl::true_ {};
}
template <typename Cons>
struct boost_tuple_iterator_identity;
template <typename Cons = tuples::null_type>
struct boost_tuple_iterator
: iterator_facade<boost_tuple_iterator<Cons>, forward_traversal_tag>
{
typedef Cons cons_type;
typedef boost_tuple_iterator_identity<
typename add_const<Cons>::type> identity;
BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons& in_cons)
: cons(in_cons) {}
Cons& cons;
@ -75,7 +67,6 @@ namespace boost { namespace fusion
>::type
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& iter)
{
@ -97,14 +88,13 @@ namespace boost { namespace fusion
>::type>
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& iter)
{
return type(iter.cons.get_tail());
}
};
template <typename I1, typename I2>
struct distance;
@ -121,7 +111,7 @@ namespace boost { namespace fusion
>::type
>::type type;
};
template <typename I1, typename I2>
struct distance
{
@ -130,8 +120,7 @@ namespace boost { namespace fusion
mpl::int_<0>,
lazy_next_distance<I1, I2>
>::type type;
BOOST_FUSION_GPU_ENABLED
static type
call(I1 const&, I2 const&)
{
@ -139,11 +128,6 @@ namespace boost { namespace fusion
}
};
template <typename I1, typename I2>
struct equal_to
: is_same<typename I1::identity, typename I2::identity>
{};
private:
// silence MSVC warning C4512: assignment operator could not be generated
boost_tuple_iterator& operator= (boost_tuple_iterator const&);
@ -155,9 +139,6 @@ namespace boost { namespace fusion
{
typedef Null cons_type;
typedef boost_tuple_iterator_identity<
typename add_const<Null>::type> identity;
template <typename I1, typename I2>
struct equal_to
: mpl::or_<
@ -175,7 +156,6 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::null_type>
{
template <typename Cons>
BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
@ -184,7 +164,6 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::null_type const>
{
template <typename Cons>
BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
@ -193,7 +172,6 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::tuple<> >
{
template <typename Cons>
BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
@ -202,7 +180,6 @@ namespace boost { namespace fusion
: boost_tuple_null_iterator<tuples::tuple<> const>
{
template <typename Cons>
BOOST_FUSION_GPU_ENABLED
explicit boost_tuple_iterator(Cons const&) {}
};
}}

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_AT_IMPL_09262006_1920)
#define BOOST_FUSION_AT_IMPL_09262006_1920
#include <boost/fusion/support/config.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/mpl/if.hpp>
@ -38,7 +37,6 @@ namespace boost { namespace fusion
>::type
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_09272006_0719)
#define BOOST_FUSION_BEGIN_IMPL_09272006_0719
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp>
namespace boost { namespace fusion
@ -27,7 +26,6 @@ namespace boost { namespace fusion
{
typedef boost_tuple_iterator<Sequence> type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{

View File

@ -1,59 +0,0 @@
/*=============================================================================
Copyright (c) 2012-2014 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_BUILD_CONS_10172012_0130)
#define BOOST_FUSION_BUILD_CONS_10172012_0130
#include <boost/tuple/tuple.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/iterator/deref.hpp>
namespace boost { namespace fusion { namespace detail
{
template <
typename First
, typename Last
, bool is_empty = result_of::equal_to<First, Last>::value>
struct build_tuple_cons;
template <typename First, typename Last>
struct build_tuple_cons<First, Last, true>
{
typedef boost::tuples::null_type type;
BOOST_FUSION_GPU_ENABLED
static type
call(First const&, Last const&)
{
return type();
}
};
template <typename First, typename Last>
struct build_tuple_cons<First, Last, false>
{
typedef
build_tuple_cons<typename result_of::next<First>::type, Last>
next_build_tuple_cons;
typedef boost::tuples::cons<
typename result_of::value_of<First>::type
, typename next_build_tuple_cons::type>
type;
BOOST_FUSION_GPU_ENABLED
static type
call(First const& f, Last const& l)
{
typename result_of::value_of<First>::type v = *f;
return type(v, next_build_tuple_cons::call(fusion::next(f), l));
}
};
}}}
#endif

View File

@ -1,50 +0,0 @@
/*=============================================================================
Copyright (c) 2012-2014 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_CONVERT_IMPL_10172012_0120)
#define BOOST_FUSION_CONVERT_IMPL_10172012_0120
#include <boost/tuple/tuple.hpp>
#include <boost/fusion/adapted/boost_tuple/detail/build_cons.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
namespace boost { namespace fusion
{
struct boost_tuple_tag;
namespace extension
{
template <typename T>
struct convert_impl;
template <>
struct convert_impl<boost_tuple_tag>
{
template <typename Sequence>
struct apply
{
typedef typename
detail::build_tuple_cons<
typename result_of::begin<Sequence>::type
, typename result_of::end<Sequence>::type
>
build_tuple_cons;
typedef typename build_tuple_cons::type type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
return build_tuple_cons::call(fusion::begin(seq), fusion::end(seq));
}
};
};
}
}}
#endif

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_END_IMPL_09272006_0721)
#define BOOST_FUSION_END_IMPL_09272006_0721
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/boost_tuple/boost_tuple_iterator.hpp>
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_const.hpp>
@ -42,7 +41,6 @@ namespace boost { namespace fusion
>
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_09272006_0726)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_09272006_0726
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_09272006_0725)
#define BOOST_FUSION_IS_VIEW_IMPL_09272006_0725
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_SIZE_IMPL_09272006_0724)
#define BOOST_FUSION_SIZE_IMPL_09272006_0724
#include <boost/fusion/support/config.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/mpl/int.hpp>

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_VALUE_AT_IMPL_09262006_1926)
#define BOOST_FUSION_VALUE_AT_IMPL_09262006_1926
#include <boost/fusion/support/config.hpp>
#include <boost/tuple/tuple.hpp>
namespace boost { namespace fusion

View File

@ -1,23 +0,0 @@
/*=============================================================================
Copyright (c) 2012 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_CLEAR_10172012_0100)
#define BOOST_FUSION_CLEAR_10172012_0100
#include <boost/mpl/identity.hpp>
#include <boost/fusion/adapted/boost_tuple/tag_of.hpp>
namespace boost { namespace fusion { namespace detail {
template <typename Tag>
struct clear;
template <>
struct clear<boost_tuple_tag> : mpl::identity<boost::tuple<> > {};
}}}
#endif

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_TAG_OF_09262006_1900)
#define BOOST_FUSION_TAG_OF_09262006_1900
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/tag_of_fwd.hpp>
namespace boost { namespace tuples

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_MPL_31122005_1152)
#define BOOST_FUSION_MPL_31122005_1152
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/mpl/detail/begin_impl.hpp>
#include <boost/fusion/adapted/mpl/detail/end_impl.hpp>
#include <boost/fusion/adapted/mpl/detail/is_sequence_impl.hpp>

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_AT_IMPL_31122005_1642)
#define BOOST_FUSION_AT_IMPL_31122005_1642
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
namespace boost { namespace fusion
@ -28,7 +27,6 @@ namespace boost { namespace fusion
{
typedef typename mpl::at<Sequence, N>::type type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Sequence)
{

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_31122005_1209)
#define BOOST_FUSION_BEGIN_IMPL_31122005_1209
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
#include <boost/mpl/begin.hpp>
#include <boost/type_traits/remove_const.hpp>
@ -33,7 +32,6 @@ namespace boost { namespace fusion {
>::type iterator;
typedef mpl_iterator<iterator> type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Sequence)
{

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141)
#define BOOST_FUSION_CATEGORY_OF_IMPL_20060217_2141
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/mpl_iterator_category.hpp>
#include <boost/mpl/begin_end.hpp>
#include <boost/mpl/is_sequence.hpp>

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_EMPTY_IMPL_31122005_1554)
#define BOOST_FUSION_EMPTY_IMPL_31122005_1554
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/empty.hpp>
namespace boost { namespace fusion

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_END_IMPL_31122005_1237)
#define BOOST_FUSION_END_IMPL_31122005_1237
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/mpl/mpl_iterator.hpp>
#include <boost/mpl/end.hpp>
#include <boost/type_traits/add_const.hpp>
@ -33,7 +32,6 @@ namespace boost { namespace fusion
>::type iterator;
typedef mpl_iterator<iterator> type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Sequence)
{

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_HAS_KEY_IMPL_31122005_1647)
#define BOOST_FUSION_HAS_KEY_IMPL_31122005_1647
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/has_key.hpp>
namespace boost { namespace fusion

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_31122005_1505
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_03202006_0048)
#define BOOST_FUSION_IS_VIEW_IMPL_03202006_0048
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_SIZE_IMPL_31122005_1508)
#define BOOST_FUSION_SIZE_IMPL_31122005_1508
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/size.hpp>
namespace boost { namespace fusion

View File

@ -8,7 +8,6 @@
#if !defined(BOOST_FUSION_VALUE_AT_IMPL_31122005_1621)
#define BOOST_FUSION_VALUE_AT_IMPL_31122005_1621
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/at.hpp>
namespace boost { namespace fusion

View File

@ -7,7 +7,6 @@
#if !defined(FUSION_MPL_ITERATOR_05052005_0731)
#define FUSION_MPL_ITERATOR_05052005_0731
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/mpl_iterator_category.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/type_traits/remove_const.hpp>
@ -38,7 +37,6 @@ namespace boost { namespace fusion
typename Iterator::iterator_type>::type
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator)
{
@ -53,7 +51,6 @@ namespace boost { namespace fusion
typename mpl::next<typename Iterator::iterator_type>::type>
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator)
{
@ -68,7 +65,6 @@ namespace boost { namespace fusion
typename mpl::prior<typename Iterator::iterator_type>::type>
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator)
{
@ -83,7 +79,6 @@ namespace boost { namespace fusion
typename mpl::advance<typename Iterator::iterator_type, N>::type>
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& /*i*/)
{
@ -104,7 +99,6 @@ namespace boost { namespace fusion
>::type
type;
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(I1 const&, I2 const&)
{

View File

@ -10,7 +10,6 @@
#ifndef BOOST_FUSION_ADAPTED_STD_PAIR_HPP
#define BOOST_FUSION_ADAPTED_STD_PAIR_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <utility>

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_BOOST_TUPLE_09242011_1744)
#define BOOST_FUSION_BOOST_TUPLE_09242011_1744
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/std_tuple/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/std_tuple/detail/is_sequence_impl.hpp>
#include <boost/fusion/adapted/std_tuple/detail/category_of_impl.hpp>
@ -16,9 +15,7 @@
#include <boost/fusion/adapted/std_tuple/detail/size_impl.hpp>
#include <boost/fusion/adapted/std_tuple/detail/at_impl.hpp>
#include <boost/fusion/adapted/std_tuple/detail/value_at_impl.hpp>
#include <boost/fusion/adapted/std_tuple/detail/convert_impl.hpp>
#include <boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp>
#include <boost/fusion/adapted/std_tuple/tag_of.hpp>
#include <boost/fusion/adapted/std_tuple/mpl/clear.hpp>
#endif

View File

@ -7,10 +7,9 @@
#if !defined(BOOST_FUSION_AT_IMPL_09242011_1744)
#define BOOST_FUSION_AT_IMPL_09242011_1744
#include <boost/fusion/support/config.hpp>
#include <tuple>
#include <utility>
#include <boost/mpl/if.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/type_traits/remove_const.hpp>
@ -30,17 +29,16 @@ namespace boost { namespace fusion
struct apply
{
typedef typename remove_const<Sequence>::type seq_type;
typedef typename std::tuple_element<N::value, seq_type>::type element;
typedef std::tuple_element<N::value, seq_type> element;
typedef typename
mpl::if_<
mpl::eval_if<
is_const<Sequence>
, typename fusion::detail::cref_result<element>::type
, typename fusion::detail::ref_result<element>::type
, fusion::detail::cref_result<element>
, fusion::detail::ref_result<element>
>::type
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_BEGIN_IMPL_09242011_1744)
#define BOOST_FUSION_BEGIN_IMPL_09242011_1744
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp>
namespace boost { namespace fusion
@ -27,7 +26,6 @@ namespace boost { namespace fusion
{
typedef std_tuple_iterator<Sequence, 0> type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{

View File

@ -1,105 +0,0 @@
/*=============================================================================
Copyright (c) 2014 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_BUILD_STD_TUPLE_05292014_0100)
#define BOOST_FUSION_BUILD_STD_TUPLE_05292014_0100
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/equal_to.hpp>
#include <boost/fusion/iterator/next.hpp>
#include <boost/fusion/iterator/value_of.hpp>
#include <boost/fusion/iterator/deref.hpp>
#include <tuple>
namespace boost { namespace fusion { namespace detail
{
template <typename First, typename Last
, bool is_empty = result_of::equal_to<First, Last>::value
>
struct build_std_tuple;
template <typename First, typename Last>
struct build_std_tuple<First, Last, true>
{
typedef std::tuple<> type;
BOOST_FUSION_GPU_ENABLED
static type
call(First const&, Last const&)
{
return type();
}
};
template <int ...> struct indexed_tuple { };
template <int, typename = indexed_tuple<>>
struct make_indexed_tuple;
template <int Head, int ...Tail>
struct make_indexed_tuple<Head, indexed_tuple<Tail...>>
{
typedef typename
boost::mpl::eval_if_c<
(Head == 0),
boost::mpl::identity<indexed_tuple<Tail...>>,
make_indexed_tuple<Head - 1, indexed_tuple<Head - 1, Tail...>>
>::type
type;
};
template <typename T, typename Rest>
struct push_front_std_tuple;
template <typename T, typename ...Rest>
struct push_front_std_tuple<T, std::tuple<Rest...>>
{
typedef std::tuple<T, Rest...> type;
template <int ...I>
BOOST_FUSION_GPU_ENABLED
static type
indexed_call(T const& first, std::tuple<Rest...> const& rest, indexed_tuple<I...>)
{
return type(first, std::get<I>(rest)...);
}
BOOST_FUSION_GPU_ENABLED
static type
call(T const& first, std::tuple<Rest...> const& rest)
{
typedef typename make_indexed_tuple<sizeof...(Rest)>::type gen;
return indexed_call(first, rest, gen());
}
};
template <typename First, typename Last>
struct build_std_tuple<First, Last, false>
{
typedef
build_std_tuple<typename result_of::next<First>::type, Last>
next_build_std_tuple;
typedef push_front_std_tuple<
typename result_of::value_of<First>::type
, typename next_build_std_tuple::type>
push_front;
typedef typename push_front::type type;
BOOST_FUSION_GPU_ENABLED
static type
call(First const& f, Last const& l)
{
typename result_of::value_of<First>::type v = *f;
return push_front::call(
v, next_build_std_tuple::call(fusion::next(f), l));
}
};
}}}
#endif

View File

@ -4,8 +4,8 @@
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_04202013_0940)
#define BOOST_FUSION_CATEGORY_OF_IMPL_04202013_0940
#if !defined(BOOST_FUSION_CATEGORY_OF_IMPL_09272006_0726)
#define BOOST_FUSION_CATEGORY_OF_IMPL_09272006_0726
namespace boost { namespace fusion
{

View File

@ -1,48 +0,0 @@
/*=============================================================================
Copyright (c) 2012-2014 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_CONVERT_IMPL_10172012_0940)
#define BOOST_FUSION_CONVERT_IMPL_10172012_0940
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/std_tuple/detail/build_std_tuple.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
namespace boost { namespace fusion
{
struct std_tuple_tag;
namespace extension
{
template <typename T>
struct convert_impl;
template <>
struct convert_impl<std_tuple_tag>
{
template <typename Sequence>
struct apply
{
typedef detail::build_std_tuple<
typename result_of::begin<Sequence>::type
, typename result_of::end<Sequence>::type
> gen;
typedef typename gen::type type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& seq)
{
return gen::call(begin(seq), end(seq));
}
};
};
}
}}
#endif

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_END_IMPL_09242011_1744)
#define BOOST_FUSION_END_IMPL_09242011_1744
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/std_tuple/std_tuple_iterator.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <tuple>
@ -31,7 +30,6 @@ namespace boost { namespace fusion
static int const size = std::tuple_size<seq_type>::value;
typedef std_tuple_iterator<Sequence, size> type;
BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& v)
{

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_IS_SEQUENCE_IMPL_09242011_1744)
#define BOOST_FUSION_IS_SEQUENCE_IMPL_09242011_1744
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_IS_VIEW_IMPL_09242011_1744)
#define BOOST_FUSION_IS_VIEW_IMPL_09242011_1744
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/bool.hpp>
namespace boost { namespace fusion

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_SIZE_IMPL_09242011_1744)
#define BOOST_FUSION_SIZE_IMPL_09242011_1744
#include <boost/fusion/support/config.hpp>
#include <tuple>
#include <boost/mpl/int.hpp>
#include <boost/type_traits/remove_const.hpp>

View File

@ -7,7 +7,6 @@
#if !defined(BOOST_FUSION_VALUE_AT_IMPL_09242011_1744)
#define BOOST_FUSION_VALUE_AT_IMPL_09242011_1744
#include <boost/fusion/support/config.hpp>
#include <tuple>
namespace boost { namespace fusion

View File

@ -1,23 +0,0 @@
/*=============================================================================
Copyright (c) 2012 Kohei Takahashi
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_CLEAR_10172012_0940)
#define BOOST_FUSION_CLEAR_10172012_0940
#include <boost/mpl/identity.hpp>
#include <boost/fusion/adapted/std_tuple/tag_of.hpp>
namespace boost { namespace fusion { namespace detail
{
template <typename Tag>
struct clear;
template <>
struct clear<std_tuple_tag> : mpl::identity<std::tuple<> > {};
}}}
#endif

View File

@ -7,13 +7,12 @@
#if !defined(FUSION_STD_TUPLE_ITERATOR_09112011_1905)
#define FUSION_STD_TUPLE_ITERATOR_09112011_1905
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/eval_if.hpp>
#include <tuple>
#include <utility>
@ -36,7 +35,7 @@ namespace boost { namespace fusion
typename add_const<Tuple>::type, Index>
identity;
BOOST_FUSION_GPU_ENABLED explicit std_tuple_iterator(Tuple& tuple)
explicit std_tuple_iterator(Tuple& tuple)
: tuple(tuple) {}
Tuple& tuple;
@ -49,16 +48,15 @@ namespace boost { namespace fusion
template <typename Iterator>
struct deref
{
typedef typename value_of<Iterator>::type element;
typedef value_of<Iterator> element;
typedef typename
mpl::if_<
mpl::eval_if<
is_const<typename Iterator::tuple_type>
, typename fusion::detail::cref_result<element>::type
, typename fusion::detail::ref_result<element>::type
, fusion::detail::cref_result<element>
, fusion::detail::ref_result<element>
>::type
type;
BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& iter)
{
@ -73,7 +71,6 @@ namespace boost { namespace fusion
typedef typename Iterator::tuple_type tuple_type;
typedef std_tuple_iterator<tuple_type, index+N::value> type;
BOOST_FUSION_GPU_ENABLED
static type
call(Iterator const& i)
{
@ -96,7 +93,6 @@ namespace boost { namespace fusion
{
typedef mpl::int_<Last::index-First::index> type;
BOOST_FUSION_GPU_ENABLED
static type
call(First const&, Last const&)
{

View File

@ -7,10 +7,15 @@
#if !defined(BOOST_FUSION_TAG_OF_09112011_1842)
#define BOOST_FUSION_TAG_OF_09112011_1842
#include <boost/fusion/support/config.hpp>
#include <tuple>
#include <boost/fusion/support/tag_of_fwd.hpp>
namespace std
{
template <typename... Elements>
class tuple;
}
namespace boost { namespace fusion
{
struct std_tuple_tag;

View File

@ -10,13 +10,11 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct_named.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
#include <boost/fusion/adapted/struct/adapt_struct_named.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
#include <boost/fusion/adapted/struct/define_struct.hpp>
#include <boost/fusion/adapted/struct/define_struct_inline.hpp>
#endif

View File

@ -10,7 +10,6 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_ASSOC_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_ASSOC_STRUCT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
@ -21,7 +20,6 @@
#include <boost/fusion/adapted/struct/detail/extension.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_base_assoc_attr_filler.hpp>
#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
@ -36,35 +34,32 @@
#include <boost/fusion/adapted/struct/detail/key_of_impl.hpp>
#include <boost/fusion/adapted/struct/detail/value_of_data_impl.hpp>
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0(X, Y, Z) \
((X, Y, Z)) BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_1
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_1(X, Y, Z) \
((X, Y, Z)) BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0_END
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_1_END
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_C_BASE( \
TEMPLATE_PARAMS_SEQ,NAME_SEQ,IS_VIEW,I,PREFIX,ATTRIBUTE) \
TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,PREFIX,ATTRIBUTE) \
\
BOOST_FUSION_ADAPT_STRUCT_C_BASE( \
TEMPLATE_PARAMS_SEQ, \
NAME_SEQ, \
IS_VIEW, \
I, \
PREFIX, \
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR(ATTRIBUTE), \
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
BOOST_PP_IF(BOOST_PP_LESS( \
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE),3), 1, 0)) \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, PREFIX, ATTRIBUTE, 3) \
\
template< \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS(TEMPLATE_PARAMS_SEQ) \
> \
struct struct_assoc_key<BOOST_FUSION_ADAPT_STRUCT_UNPACK_NAME(NAME_SEQ), I> \
{ \
typedef \
BOOST_FUSION_ADAPT_ASSOC_STRUCT_WRAPPEDATTR_GET_KEY(ATTRIBUTE) type; \
typedef BOOST_PP_TUPLE_ELEM(3, 2, ATTRIBUTE) type; \
};
#define BOOST_FUSION_ADAPT_ASSOC_STRUCT_C( \
TEMPLATE_PARAMS_SEQ,NAME_SEQ,IS_VIEW, I, ATTRIBUTE) \
TEMPLATE_PARAMS_SEQ,NAME_SEQ, I, ATTRIBUTE) \
\
BOOST_FUSION_ADAPT_ASSOC_STRUCT_C_BASE( \
TEMPLATE_PARAMS_SEQ,NAME_SEQ,IS_VIEW,I,BOOST_PP_EMPTY,ATTRIBUTE)
TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,BOOST_PP_EMPTY,ATTRIBUTE)
#define BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT( \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, ATTRIBUTES) \

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_ASSOC_STRUCT_NAMED_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_ASSOC_STRUCT_NAMED_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>

View File

@ -1,7 +1,6 @@
/*=============================================================================
Copyright (c) 2001-2007 Joel de Guzman
Copyright (c) 2009-2011 Christopher Schmidt
Copyright (c) 2013-2014 Damien Buhl
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)
@ -10,13 +9,8 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/preprocessor/config/config.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/empty.hpp>
#include <boost/preprocessor/control/if.hpp>
#include <boost/preprocessor/comparison/less.hpp>
#include <boost/preprocessor/comparison/equal.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/add_const.hpp>
@ -24,7 +18,6 @@
#include <boost/fusion/adapted/struct/detail/extension.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_base.hpp>
#include <boost/fusion/adapted/struct/detail/adapt_base_attr_filler.hpp>
#include <boost/fusion/adapted/struct/detail/at_impl.hpp>
#include <boost/fusion/adapted/struct/detail/is_view_impl.hpp>
#include <boost/fusion/adapted/struct/detail/is_sequence_impl.hpp>
@ -36,88 +29,43 @@
#include <boost/fusion/adapted/struct/detail/value_of_impl.hpp>
#include <boost/fusion/adapted/struct/detail/deref_impl.hpp>
#define BOOST_FUSION_ADAPT_STRUCT_C( \
TEMPLATE_PARAMS_SEQ, NAME_SEQ, IS_VIEW, I, ATTRIBUTE) \
BOOST_FUSION_ADAPT_STRUCT_C_BASE( \
TEMPLATE_PARAMS_SEQ, \
NAME_SEQ, \
IS_VIEW, \
I, \
BOOST_PP_IF(IS_VIEW, BOOST_FUSION_PROXY_PREFIX, BOOST_PP_EMPTY), \
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR(ATTRIBUTE), \
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), \
BOOST_PP_IF( \
BOOST_PP_LESS( \
BOOST_FUSION_ADAPT_STRUCT_WRAPPEDATTR_SIZE(ATTRIBUTE), 2) \
, 1, 0))
#define BOOST_FUSION_ADAPT_STRUCT_FILLER_0(X, Y) \
((X, Y)) BOOST_FUSION_ADAPT_STRUCT_FILLER_1
#define BOOST_FUSION_ADAPT_STRUCT_FILLER_1(X, Y) \
((X, Y)) BOOST_FUSION_ADAPT_STRUCT_FILLER_0
#define BOOST_FUSION_ADAPT_STRUCT_FILLER_0_END
#define BOOST_FUSION_ADAPT_STRUCT_FILLER_1_END
#define BOOST_FUSION_ADAPT_STRUCT_C(TEMPLATE_PARAMS_SEQ, NAME_SEQ, I, ATTRIBUTE)\
BOOST_FUSION_ADAPT_STRUCT_C_BASE( \
TEMPLATE_PARAMS_SEQ,NAME_SEQ,I,BOOST_PP_EMPTY,ATTRIBUTE,2)
#define BOOST_FUSION_ADAPT_TPL_STRUCT(TEMPLATE_PARAMS_SEQ,NAME_SEQ, ATTRIBUTES) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \
(1)TEMPLATE_PARAMS_SEQ, \
(1)NAME_SEQ, \
struct_tag, \
0, \
((0,0)) BOOST_PP_CAT( \
BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END), \
BOOST_FUSION_ADAPT_STRUCT_C)
#if BOOST_PP_VARIADICS
#define BOOST_FUSION_ADAPT_STRUCT(NAME, ATTRIBUTES) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \
(0), \
(0)(NAME), \
struct_tag, \
0, \
BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \
BOOST_FUSION_ADAPT_STRUCT_C)
# define BOOST_FUSION_ADAPT_TPL_STRUCT(TEMPLATE_PARAMS_SEQ,NAME_SEQ, ...) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \
(1)TEMPLATE_PARAMS_SEQ, \
(1)NAME_SEQ, \
struct_tag, \
0, \
BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER(__VA_ARGS__), \
BOOST_FUSION_ADAPT_STRUCT_C)
# define BOOST_FUSION_ADAPT_STRUCT(NAME, ...) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \
(0), \
(0)(NAME), \
struct_tag, \
0, \
BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER(__VA_ARGS__), \
BOOST_FUSION_ADAPT_STRUCT_C)
# define BOOST_FUSION_ADAPT_STRUCT_AS_VIEW(NAME, ...) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \
(0), \
(0)(NAME), \
struct_tag, \
1, \
BOOST_FUSION_ADAPT_STRUCT_ATTRIBUTES_FILLER(__VA_ARGS__), \
BOOST_FUSION_ADAPT_STRUCT_C)
#else // BOOST_PP_VARIADICS
# define BOOST_FUSION_ADAPT_TPL_STRUCT( \
TEMPLATE_PARAMS_SEQ,NAME_SEQ, ATTRIBUTES) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \
(1)TEMPLATE_PARAMS_SEQ, \
(1)NAME_SEQ, \
struct_tag, \
0, \
BOOST_PP_CAT( \
BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \
BOOST_FUSION_ADAPT_STRUCT_C)
# define BOOST_FUSION_ADAPT_STRUCT(NAME, ATTRIBUTES) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \
(0), \
(0)(NAME), \
struct_tag, \
0, \
BOOST_PP_CAT( \
BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES, \
_END), \
BOOST_FUSION_ADAPT_STRUCT_C)
# define BOOST_FUSION_ADAPT_STRUCT_AS_VIEW(NAME, ATTRIBUTES) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \
(0), \
(0)(NAME), \
struct_tag, \
1, \
BOOST_PP_CAT( \
BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES, \
_END), \
BOOST_FUSION_ADAPT_STRUCT_C)
#endif // BOOST_PP_VARIADICS
#define BOOST_FUSION_ADAPT_STRUCT_AS_VIEW(NAME, ATTRIBUTES) \
BOOST_FUSION_ADAPT_STRUCT_BASE( \
(0), \
(0)(NAME), \
struct_tag, \
1, \
BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \
BOOST_FUSION_ADAPT_STRUCT_C)
#endif

View File

@ -10,46 +10,30 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_NAMED_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_ADAPT_STRUCT_NAMED_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/adapted/struct/detail/proxy_type.hpp>
#include <boost/preprocessor/empty.hpp>
#ifdef BOOST_PP_VARIADICS
#define BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_0(X, Y) \
(X, obj.Y) BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_1
#define BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_1(X, Y) \
(X, obj.Y) BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_0
#define BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_0_END
#define BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_1_END
# define BOOST_FUSION_ADAPT_STRUCT_NAMED_NS( \
WRAPPED_TYPE, NAMESPACE_SEQ, NAME, ...) \
#define BOOST_FUSION_ADAPT_STRUCT_NAMED_NS( \
WRAPPED_TYPE, NAMESPACE_SEQ, NAME, ATTRIBUTES) \
\
BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE_IMPL( \
WRAPPED_TYPE,(0)NAMESPACE_SEQ,NAME) \
BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE_IMPL( \
WRAPPED_TYPE,(0)NAMESPACE_SEQ,NAME) \
\
BOOST_FUSION_ADAPT_STRUCT_AS_VIEW( \
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION( \
(0)NAMESPACE_SEQ)NAME, \
__VA_ARGS__)
BOOST_FUSION_ADAPT_STRUCT_AS_VIEW( \
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION((0)NAMESPACE_SEQ)NAME, \
BOOST_PP_CAT( \
BOOST_FUSION_ADAPT_STRUCT_NAMED_FILLER_0 ATTRIBUTES,_END))
# define BOOST_FUSION_ADAPT_STRUCT_NAMED(WRAPPED_TYPE, NAME, ...) \
BOOST_FUSION_ADAPT_STRUCT_NAMED_NS( \
WRAPPED_TYPE,(boost)(fusion)(adapted),NAME,__VA_ARGS__)
#else // BOOST_PP_VARIADICS
# define BOOST_FUSION_ADAPT_STRUCT_NAMED_NS( \
WRAPPED_TYPE, NAMESPACE_SEQ, NAME, ATTRIBUTES) \
\
BOOST_FUSION_ADAPT_STRUCT_DEFINE_PROXY_TYPE_IMPL( \
WRAPPED_TYPE,(0)NAMESPACE_SEQ,NAME) \
\
BOOST_FUSION_ADAPT_STRUCT_AS_VIEW( \
BOOST_FUSION_ADAPT_STRUCT_NAMESPACE_DECLARATION( \
(0)NAMESPACE_SEQ)NAME, \
ATTRIBUTES)
# define BOOST_FUSION_ADAPT_STRUCT_NAMED(WRAPPED_TYPE, NAME, ATTRIBUTES) \
BOOST_FUSION_ADAPT_STRUCT_NAMED_NS( \
WRAPPED_TYPE,(boost)(fusion)(adapted),NAME,ATTRIBUTES)
#endif
#define BOOST_FUSION_ADAPT_STRUCT_NAMED(WRAPPED_TYPE, NAME, ATTRIBUTES) \
BOOST_FUSION_ADAPT_STRUCT_NAMED_NS( \
WRAPPED_TYPE,(boost)(fusion)(adapted),NAME,ATTRIBUTES)
#endif

View File

@ -8,17 +8,9 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DEFINE_ASSOC_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_ASSOC_STRUCT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>
#include <boost/fusion/adapted/struct/detail/define_struct.hpp>
#define BOOST_FUSION_DEFINE_ASSOC_STRUCT_FILLER_0(X, Y, Z) \
((X, Y, Z)) BOOST_FUSION_DEFINE_ASSOC_STRUCT_FILLER_1
#define BOOST_FUSION_DEFINE_ASSOC_STRUCT_FILLER_1(X, Y, Z) \
((X, Y, Z)) BOOST_FUSION_DEFINE_ASSOC_STRUCT_FILLER_0
#define BOOST_FUSION_DEFINE_ASSOC_STRUCT_FILLER_0_END
#define BOOST_FUSION_DEFINE_ASSOC_STRUCT_FILLER_1_END
#define BOOST_FUSION_DEFINE_ASSOC_TPL_STRUCT( \
TEMPLATE_PARAMS_SEQ, NAMESPACE_SEQ, NAME, ATTRIBUTES) \
\
@ -27,7 +19,7 @@
(0)NAMESPACE_SEQ, \
NAME, \
BOOST_PP_CAT( \
BOOST_FUSION_DEFINE_ASSOC_STRUCT_FILLER_0(0,0,0)ATTRIBUTES,_END), \
BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0(0,0,0)ATTRIBUTES,_END), \
3) \
\
BOOST_FUSION_ADAPT_ASSOC_TPL_STRUCT( \
@ -41,7 +33,7 @@
(0)NAMESPACE_SEQ, \
NAME, \
BOOST_PP_CAT( \
BOOST_FUSION_DEFINE_ASSOC_STRUCT_FILLER_0(0,0,0)ATTRIBUTES,_END), \
BOOST_FUSION_ADAPT_ASSOC_STRUCT_FILLER_0(0,0,0)ATTRIBUTES,_END), \
3) \
\
BOOST_FUSION_ADAPT_ASSOC_STRUCT( \

View File

@ -8,7 +8,6 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/adapted/struct/detail/define_struct.hpp>
@ -19,7 +18,7 @@
TEMPLATE_PARAMS_SEQ, \
(0)NAMESPACE_SEQ, \
NAME, \
BOOST_PP_CAT(BOOST_FUSION_DEFINE_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \
BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \
2) \
\
BOOST_FUSION_ADAPT_TPL_STRUCT( \
@ -32,7 +31,7 @@
BOOST_FUSION_DEFINE_STRUCT_IMPL( \
(0)NAMESPACE_SEQ, \
NAME, \
BOOST_PP_CAT(BOOST_FUSION_DEFINE_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \
BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0(0,0)ATTRIBUTES,_END), \
2) \
\
BOOST_FUSION_ADAPT_STRUCT( \

View File

@ -1,26 +0,0 @@
/*=============================================================================
Copyright (c) 2012 Nathan Ridge
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_INLINE_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DEFINE_STRUCT_INLINE_HPP
#include <boost/fusion/support/config.hpp>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/adapted/struct/detail/define_struct_inline.hpp>
#define BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE( \
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES) \
\
BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE_IMPL( \
TEMPLATE_PARAMS_SEQ, \
NAME, \
ATTRIBUTES)
#define BOOST_FUSION_DEFINE_STRUCT_INLINE(NAME, ATTRIBUTES) \
BOOST_FUSION_DEFINE_STRUCT_INLINE_IMPL(NAME, ATTRIBUTES) \
#endif

Some files were not shown because too many files have changed in this diff Show More