Compare commits
1 Commits
fusion_ada
...
svn-branch
Author | SHA1 | Date | |
---|---|---|---|
4686882502 |
307
doc/adapted.qbk
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
Before Width: | Height: | Size: 603 B After Width: | Height: | Size: 603 B |
0
doc/html/images/home.png
Executable file → Normal file
Before Width: | Height: | Size: 358 B After Width: | Height: | Size: 358 B |
0
doc/html/images/next.png
Executable file → Normal file
Before Width: | Height: | Size: 336 B After Width: | Height: | Size: 336 B |
0
doc/html/images/note.png
Executable file → Normal file
Before Width: | Height: | Size: 658 B After Width: | Height: | Size: 658 B |
0
doc/html/images/prev.png
Executable file → Normal file
Before Width: | Height: | Size: 334 B After Width: | Height: | Size: 334 B |
0
doc/html/images/smiley.png
Executable file → Normal file
Before Width: | Height: | Size: 867 B After Width: | Height: | Size: 867 B |
0
doc/html/images/tip.png
Executable file → Normal file
Before Width: | Height: | Size: 640 B After Width: | Height: | Size: 640 B |
0
doc/html/images/up.png
Executable file → Normal file
Before Width: | Height: | Size: 370 B After Width: | Height: | Size: 370 B |
@ -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 1. 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 1. 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 1. 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 © 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>
|
||||
|
@ -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]
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
188
doc/sequence.qbk
@ -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]
|
||||
|
@ -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]
|
||||
|
@ -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);
|
||||
|
69
doc/view.qbk
@ -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]
|
||||
|
@ -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
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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( \
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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( \
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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) \
|
||||
{ \
|
||||
|
@ -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
|
@ -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
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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&)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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&) {}
|
||||
};
|
||||
}}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
@ -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
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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&)
|
||||
{
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
@ -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
|
||||
{
|
||||
|
@ -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
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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
|
@ -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&)
|
||||
{
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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) \
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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( \
|
||||
|
@ -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( \
|
||||
|
@ -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
|