Compare commits

..

109 Commits

Author SHA1 Message Date
403021caef Create branch to keep WIP patch for modular build.
[SVN r85883]
2013-09-25 08:12:19 +00:00
3b24ed44f8 specialization of convert_impl for map_tag, refs #8759
[SVN r84937]
2013-07-02 02:10:04 +00:00
7922147716 update fusion Nil template parameters to Nil_ to make ObjC happy. trac #5010
[SVN r84441]
2013-05-23 01:02:52 +00:00
13d00bd6c2 minor updates to fusion docs
[SVN r84440]
2013-05-22 23:28:12 +00:00
56d0d48eb9 added static assert when N is > size of vector
[SVN r84283]
2013-05-14 21:10:02 +00:00
e83960d3e9 allow map keys to be forward declared only
[SVN r84275]
2013-05-13 23:01:05 +00:00
92ee36a556 Fixes #8336
[SVN r84002]
2013-04-21 14:07:21 +00:00
52298c686e Fixes #8456
[SVN r84001]
2013-04-21 14:00:37 +00:00
80b4ce43c5 Fixes #8418
[SVN r84000]
2013-04-21 13:54:59 +00:00
b36426c8e3 patches from tongari: allow custom Associative Sequence which doesn't have fusion::pair
as elements.

[SVN r83455]
2013-03-16 07:28:23 +00:00
d354c5183b Tweaks for MSVC. MSVC version of map is not yet move enables so it is failing the move test
[SVN r82728]
2013-02-04 12:15:02 +00:00
fb3bd4cea8 minor cleanup
[SVN r82727]
2013-02-04 11:54:59 +00:00
9672fe5385 map move supported + value_at_impl added
[SVN r82726]
2013-02-04 11:52:58 +00:00
085c3c25ca more map tests (including move test)
[SVN r82725]
2013-02-04 11:52:18 +00:00
85119dbd21 added as_map
fixed bug: wrong iterator category for map_iterator

[SVN r82721]
2013-02-04 09:52:52 +00:00
764a31e9f5 fixed typo
[SVN r82714]
2013-02-04 06:22:50 +00:00
228401d898 More map tests and more API features implemented + tweaks to affected components
[SVN r82713]
2013-02-04 06:21:45 +00:00
aba201eb4e Added more map tests
[SVN r82712]
2013-02-04 06:20:10 +00:00
9c5d6bcc8c added pair < operator for case where key (first type) is the same.
[SVN r82709]
2013-02-04 04:10:29 +00:00
7b6cf39540 modern c++11 map implemented + various tweaks
[SVN r82708]
2013-02-04 03:49:34 +00:00
996f4152d2 modern c++11 map implemented
[SVN r82707]
2013-02-04 03:46:42 +00:00
d128c6f6aa Moving non-variadic map implementation to detail/cpp03 directory
[SVN r82701]
2013-02-03 11:50:48 +00:00
fec1da027c Cleanup deque to clearly separate the C++03 code from c++11 code
[SVN r82698]
2013-02-03 10:31:46 +00:00
a1a6e42590 Removing the preprocessed file generation which is meant for internal use only
[SVN r82697]
2013-02-03 10:13:41 +00:00
4272519a3c cleanup
[SVN r82670]
2013-01-31 15:56:00 +00:00
9dcdfa323f Better deque conversion
[SVN r82669]
2013-01-31 15:31:28 +00:00
5a520585d8 Fixes #7955
[SVN r82668]
2013-01-31 13:01:36 +00:00
1823f30420 Some cleanup
[SVN r82636]
2013-01-27 14:41:39 +00:00
f96bbef8fa MSVC (VC11) fixes for latest updates
[SVN r82634]
2013-01-27 12:15:26 +00:00
f1687bffcf Added LF at the end
[SVN r82632]
2013-01-27 10:14:40 +00:00
6c17c04ce6 Workaround for some tests on C++11 to allow disambiguation of && and const& arguments to ctors
[SVN r82631]
2013-01-27 10:14:16 +00:00
b7d02a8c55 + Fixes ticket #7914
+ C++11 implementations for make_deque, deque_tie and as_deque

[SVN r82630]
2013-01-27 07:17:01 +00:00
6a47d86d72 C++ fixes
[SVN r82629]
2013-01-27 07:13:58 +00:00
2f61e2b707 disabling some tests with errors on c++11
[SVN r82628]
2013-01-27 04:24:40 +00:00
ea0cad5800 Added fusion::move algorithm
[SVN r82550]
2013-01-19 14:37:00 +00:00
f9d6e05676 Applied patches for Tickets #7738, #7737 and #7646
[SVN r82348]
2013-01-04 01:43:06 +00:00
211b47b47d clarify in fusion docs that associative sequences are not checked for key uniqueness.
[SVN r81891]
2012-12-13 09:41:50 +00:00
6d265316ed Workaround for ObjC (mis)use of nil (from Mathias Gaunard)
[SVN r81628]
2012-11-30 02:31:23 +00:00
8d6200ef58 Removed usage of deprecated macros in Boost.Fusion and Boost.Spirit
[SVN r81569]
2012-11-26 18:44:46 +00:00
e1819c11b2 Remove usage of deprecated macros
[SVN r81452]
2012-11-21 03:12:31 +00:00
cfbbba272e Fixes for Ticket #7569 ( Compile Error using BOOST_FUSION_DEFINE_STRUCT_INLINE with VC10 and GCC <4.5 )
[SVN r81165]
2012-11-04 00:18:41 +00:00
d01148d339 Fixed typo
[SVN r81164]
2012-11-03 23:44:36 +00:00
f760ed7b8f removing c++11 requirements in jamfile (mistakenly added)
[SVN r80865]
2012-10-05 06:15:02 +00:00
752f911a91 #7427 (Warning fixes in fusion)
[SVN r80812]
2012-10-02 01:12:19 +00:00
b57cd4ede9 - patch from nathan ridge
- fixed deque regression 

[SVN r80458]
2012-09-09 00:27:37 +00:00
a856857cb7 - Fixed code to allow decltype implementation of boost::result_of with BOOST_RESULT_OF_USE_DECLTYPE defined.
- Reverted sequence/iterator.hpp to original <correct-no-workaround> version.

[SVN r80396]
2012-09-04 13:42:14 +00:00
78ff3d8831 Fixed code to allow decltype implementation of boost::result_of with BOOST_RESULT_OF_USE_DECLTYPE defined.
[SVN r80395]
2012-09-04 13:40:38 +00:00
80799eed95 C++11 fixes for deque
[SVN r80392]
2012-09-04 05:04:26 +00:00
35ec74edbc C++11 fixes for deque
[SVN r80391]
2012-09-04 05:04:25 +00:00
106702d388 Fix to silence MSVC warnings (Nathan Ridge)
[SVN r80368]
2012-09-03 07:08:47 +00:00
4382b64aa7 Updated changelog
removed unmaintained todo.txt

[SVN r80347]
2012-09-01 02:12:46 +00:00
26ba07f36c move-assign test tweaks
[SVN r80346]
2012-09-01 02:02:09 +00:00
a53f93ff1a move-assign for vector
[SVN r80345]
2012-09-01 02:01:26 +00:00
705ca2b61b move-assign for deque
[SVN r80344]
2012-09-01 01:04:12 +00:00
e587ad4d50 Added move-assign test
[SVN r80343]
2012-09-01 01:02:46 +00:00
3613310b62 deque move-ctor OK on gcc
[SVN r80334]
2012-08-31 15:58:31 +00:00
5946ab9936 deque move-ctor OK on gcc
[SVN r80333]
2012-08-31 15:57:49 +00:00
c8b47ca3ca Added move ctors for vector and deque (deque for gcc partially working for now)
no preprocessed files yet

[SVN r80331]
2012-08-31 14:33:12 +00:00
16de1dcd01 Added move ctors for vector and deque (deque for gcc partially working for now)
[SVN r80330]
2012-08-31 14:32:08 +00:00
038976991e Fixed MSVC errors (from Nathan Ridge)
[SVN r80326]
2012-08-31 04:12:29 +00:00
4ccb4328f6 Fusion: fixing bogus preprocessor directive (missing newline at end of file)
[SVN r79788]
2012-07-28 20:44:56 +00:00
eaf9e79e85 latest patch from Nathan Ridge
[SVN r79306]
2012-07-05 23:40:17 +00:00
a3b0cad1e7 latest oatch from Nathan Ridge
[SVN r79305]
2012-07-05 23:39:50 +00:00
85583b5ea9 allow boolean traits implementations to use std::true_type and std::false_type
[SVN r79131]
2012-06-27 04:27:50 +00:00
191a3d75ed Fix for Ticket #6965 from Joel Falcou
[SVN r79099]
2012-06-26 10:16:35 +00:00
136331963a Added test for Ticket #6965
[SVN r79098]
2012-06-26 10:14:49 +00:00
70589c53c6 BOOST_FUSION_DEFINE_STRUCT_INLINE patch by Nathan Ridge
[SVN r78509]
2012-05-19 01:24:55 +00:00
ed3776ce8c BOOST_FUSION_DEFINE_STRUCT_INLINE patch by Nathan Ridge
[SVN r78508]
2012-05-19 01:24:16 +00:00
a46bd7ab72 patch for ticket #6910 by michel
[SVN r78507]
2012-05-19 01:18:43 +00:00
8ce40ebd0c Patch by Nathan Ridge to allow BOOST_FUSION_ADAPT_ADT adapted classes to be compared using relational operators.
[SVN r78490]
2012-05-17 01:10:20 +00:00
51ade6529c typo fix by Mario Lang
[SVN r78464]
2012-05-14 00:41:42 +00:00
b63c8214d7 Patches from Nathan Ridge using SFINAE to disable the Fusion algorithms for non-{Fusion sequence} types
[SVN r78463]
2012-05-14 00:37:21 +00:00
66e8a6d3b7 Doc updates for deque
[SVN r78199]
2012-04-26 00:03:42 +00:00
524769f6fb patch for clang from Michel Morin
[SVN r78176]
2012-04-24 01:40:17 +00:00
654dfbedb8 patch for clang from Michel Morin
[SVN r78175]
2012-04-24 01:39:43 +00:00
fad4a7ebeb rearranging files
[SVN r78106]
2012-04-21 06:09:54 +00:00
01f002f084 tweaked cref_result and ref_result to be non-lazy (for consistency).
[SVN r78058]
2012-04-18 02:57:56 +00:00
c8224c8bdf deque fix for ambiguity and making ctors explicit
[SVN r78056]
2012-04-18 01:18:10 +00:00
b7eda8d0f4 Doc updates for deque
[SVN r77984]
2012-04-15 09:47:19 +00:00
ecc87abaab more deque updates
[SVN r77967]
2012-04-14 00:57:15 +00:00
a3c2258017 Added deque docs
[SVN r77879]
2012-04-10 02:30:18 +00:00
d87b5a8000 minor tweaks
[SVN r77814]
2012-04-07 12:02:16 +00:00
b34a8c79e8 hide detail stuff
[SVN r77812]
2012-04-07 11:07:35 +00:00
ec99f829f3 updates
[SVN r77811]
2012-04-07 10:57:10 +00:00
2936fd30fb missing include
[SVN r77810]
2012-04-07 10:26:23 +00:00
a36f0f95cb c++ port of deque working
[SVN r77809]
2012-04-07 10:08:00 +00:00
93ce3bd9bf c++ port of deque underway
[SVN r77808]
2012-04-07 09:56:07 +00:00
e15c27bc8b partial update (upgrade to c++11)
[SVN r77805]
2012-04-07 07:54:18 +00:00
92d51dcfa8 c++11 version start
[SVN r77803]
2012-04-07 07:43:05 +00:00
221e07a7a3 + bumped copyright date
+ mpl::int_ optimizations

[SVN r77802]
2012-04-07 07:34:00 +00:00
2038772e90 fixed wrong spelling
[SVN r77472]
2012-03-22 10:45:12 +00:00
b6142f1613 Add newlines at end of file to avoid warnings like this:
boost/include/boost/fusion/tuple/detail/preprocessed/tuple.hpp:21:7: warning: no newline at end of file



[SVN r77424]
2012-03-20 02:12:55 +00:00
df0fbd1d9d typo fix
[SVN r77114]
2012-02-25 01:09:58 +00:00
38cd16639d Fixes Ticket #6372
[SVN r76395]
2012-01-10 02:03:43 +00:00
1c51ad943a Fix for ticket #6338
[SVN r76238]
2011-12-31 05:48:27 +00:00
a25a7092d8 Patches from Tim Blechmann
[SVN r75976]
2011-12-16 00:14:49 +00:00
48e4118768 Fixes for MSVC workarounds from Freundlich: http://codepad.org/wRelwDJt
[SVN r75595]
2011-11-21 14:43:19 +00:00
0a520f6021 fix problem where sizeof(int) != sizeof(long)
[SVN r75563]
2011-11-20 10:59:09 +00:00
bbf10066bc C++11 patches by Michel Morin
[SVN r75394]
2011-11-07 22:07:05 +00:00
c2052a3c0c Fix Ticket #6067
[SVN r75318]
2011-11-04 20:37:33 +00:00
480183059e + Fixes Ticket #6016 using a two-level specialization such that specialization is preferred over SFINAE.
+ Removes tag_of_fallback. It's not needed anymore. The proper way is to specialize tag_of.

[SVN r74934]
2011-10-13 00:23:40 +00:00
fd82b51cec Wrong version. Should be 2.2 + fixed copyright notices and dates
[SVN r74886]
2011-10-10 10:37:53 +00:00
24bca52c5e Wrong version. Should be 2.2.
[SVN r74885]
2011-10-10 10:08:44 +00:00
459a1dba3d Bumped copyright date and version to 2.1 (it's about time!).
[SVN r74883]
2011-10-10 10:05:49 +00:00
10274e7884 Made map random access. Thanks to Brandon Kohn!
[SVN r74882]
2011-10-10 09:55:52 +00:00
b6df98e86c Made map random access. Thanks to Brandon Kohn!
[SVN r74881]
2011-10-10 09:55:41 +00:00
4be9e08af7 Fix for ticket #6000
[SVN r74872]
2011-10-10 00:59:32 +00:00
f46b2aeb73 Fix for ticket #6000
[SVN r74871]
2011-10-10 00:58:24 +00:00
21301c93dc Fix for ticket #6000
[SVN r74870]
2011-10-10 00:47:40 +00:00
218 changed files with 5385 additions and 2098 deletions

View File

@ -244,7 +244,7 @@ __random_access_sequence__.
[heading Semantics]
The above macro generates the necessary code to adapt `struct_name` or an
The above macro generates the necessary code to adapt `struct_name` or an
arbitrary specialization of `struct_name` as a model of
__random_access_sequence__.
The sequence `(template_param0)(template_param1)...` declares the names of
@ -287,9 +287,9 @@ namespace qualified name of the struct to be adapted.
[section:adapt_struct_named BOOST_FUSION_ADAPT_STRUCT_NAMED]
[heading Description]
BOOST_FUSION_ADAPT_STRUCT_NAMED and BOOST_FUSION_ADAPT_STRUCT_NAMED_NS are
macros that can be used to generate all the necessary boilerplate to make an
arbitrary struct a model of __random_access_sequence__. The given struct is
BOOST_FUSION_ADAPT_STRUCT_NAMED and BOOST_FUSION_ADAPT_STRUCT_NAMED_NS are
macros that can be used to generate all the necessary boilerplate to make an
arbitrary struct a model of __random_access_sequence__. The given struct is
adapted using the given name.
[heading Synopsis]
@ -312,7 +312,7 @@ adapted using the given name.
[heading Semantics]
The above macros generate the necessary code to adapt `struct_name`
as a model of __random_access_sequence__ while using `adapted_name` as the
as a model of __random_access_sequence__ while using `adapted_name` as the
name of the adapted struct.
The sequence `(namespace0)(namespace1)...` declares the namespace
for `adapted_name`. It yields to a fully qualified name for `adapted_name` of
@ -427,7 +427,7 @@ __random_access_sequence__ and __associative_sequence__.
[heading Semantics]
The above macro generates the necessary code to adapt `struct_name` or an
The above macro generates the necessary code to adapt `struct_name` or an
arbitrary specialization of `struct_name` as a model of
__random_access_sequence__ and __associative_sequence__.
The sequence `(template_param0)(template_param1)...` declares the names of
@ -463,7 +463,7 @@ namespace qualified name of the struct to be adapted.
struct name;
struct age;
}
// Any instantiated demo::employee is now a Fusion sequence.
// It is also an associative sequence with
// keys keys::name and keys::age present.
@ -478,8 +478,8 @@ namespace qualified name of the struct to be adapted.
[section:adapt_assoc_struct_named BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED]
[heading Description]
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED and BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_NS are
macros that can be used to generate all the necessary boilerplate to make an
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED and BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED_NS are
macros that can be used to generate all the necessary boilerplate to make an
arbitrary struct a model of __random_access_sequence__ and
__associative_sequence__. The given struct is adapted using the given name.
@ -539,7 +539,7 @@ namespace qualified name of the struct to be converted.
struct name;
struct age;
}
// boost::fusion::adapted::adapted_employee is now a Fusion sequence
// referring to demo::employee
BOOST_FUSION_ADAPT_ASSOC_STRUCT_NAMED(
@ -567,7 +567,7 @@ __random_access_sequence__.
[heading Expression Semantics]
The above macro generates the necessary code to adapt `type_name`
as a model of __random_access_sequence__.
as a model of __random_access_sequence__.
The sequence of
[^(attribute_type['N], attribute_const_type['N], get_expr['N], set_expr['N])]
quadruples declares the types, const types, get-expressions and set-expressions
@ -600,7 +600,7 @@ namespace qualified name of the class type to be adapted.
#include <boost/fusion/adapted/adt/adapt_adt.hpp>
#include <boost/fusion/include/adapt_adt.hpp>
[heading Example]
namespace demo
{
@ -609,41 +609,41 @@ namespace qualified name of the class type to be adapted.
private:
std::string name;
int age;
public:
void set_name(std::string const& n)
{
name=n;
}
void set_age(int a)
{
age=a;
}
std::string const& get_name()const
{
return name;
}
int get_age()const
{
return age;
}
};
}
BOOST_FUSION_ADAPT_ADT(
demo::employee,
(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";
back(e)=41;
//Prints 'Edward Norton is 41 years old'
std::cout << e.get_name() << " is " << e.get_age() << " years old" << std::endl;
[heading See also]
__adt_attribute_proxy__
@ -670,7 +670,7 @@ __random_access_sequence__.
The above macro generates the necessary code to adapt `type_name`
or an arbitrary specialization of `type_name`
as a model of __random_access_sequence__.
as a model of __random_access_sequence__.
The sequence `(template_param0)(template_param1)...` declares the names of
the template type parameters used.
The sequence `(specialization_param0)(specialization_param1)...`
@ -708,40 +708,40 @@ namespace qualified name of the template class type to be adapted.
#include <boost/fusion/adapted/adt/adapt_adt.hpp>
#include <boost/fusion/include/adapt_adt.hpp>
[heading Example]
namespace demo
{
{
template<typename Name, typename Age>
struct employee
{
private:
Name name;
Age age;
public:
void set_name(Name const& n)
{
name=n;
}
void set_age(Age const& a)
{
age=a;
}
Name const& get_name()const
{
return name;
}
Age const& get_age()const
{
return age;
}
};
}
BOOST_FUSION_ADAPT_TPL_ADT(
(Name)(Age),
(demo::employee) (Name)(Age),
@ -753,7 +753,7 @@ namespace qualified name of the template class type to be adapted.
boost::fusion::back(e)=41;
//Prints 'Edward Norton is 41 years old'
std::cout << e.get_name() << " is " << e.get_age() << " years old" << std::endl;
[heading See also]
__adt_attribute_proxy__
@ -778,7 +778,7 @@ __random_access_sequence__ and __associative_sequence__.
[heading Expression Semantics]
The above macro generates the necessary code to adapt `type_name`
as a model of __random_access_sequence__ and __associative_sequence__.
as a model of __random_access_sequence__ and __associative_sequence__.
The sequence of
[^(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
@ -800,7 +800,7 @@ The actual return type of fusion's intrinsic sequence access (meta-)functions
when in invoked with (an instance of) `type_name` is a proxy type.
This type is implicitly convertible to the attribute type via [^get_expr['N]] and
forwards assignment to the underlying element via [^set_expr['N]].
The value type (that is the type returned by __result_of_value_of__, __result_of_value_of_data__,
The value type (that is the type returned by __result_of_value_of__, __result_of_value_of_data__,
__result_of_value_at__, __result_of_value_at_c__ and __result_of_value_at_key__) of the ['N]th element
is [^attribute_type['N]] with const-qualifier and reference removed.
@ -811,7 +811,7 @@ namespace qualified name of the class type to be adapted.
#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
#include <boost/fusion/include/adapt_assoc_adt.hpp>
[heading Example]
namespace demo
{
@ -820,47 +820,47 @@ namespace qualified name of the class type to be adapted.
private:
std::string name;
int age;
public:
void set_name(std::string const& n)
{
name=n;
}
void set_age(int a)
{
age=a;
}
std::string const& get_name()const
{
return name;
}
int get_age()const
{
return age;
}
};
}
namespace keys
{
struct name;
struct age;
}
BOOST_FUSION_ADAPT_ASSOC_ADT(
demo::employee,
(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";
at_key<keys::age>(e)=41;
//Prints 'Edward Norton is 41 years old'
std::cout << e.get_name() << " is " << e.get_age() << " years old" << std::endl;
[heading See also]
__adt_attribute_proxy__
@ -887,7 +887,7 @@ __random_access_sequence__ and __associative_sequence__.
The above macro generates the necessary code to adapt `type_name`
or an arbitrary specialization of `type_name`
as a model of __random_access_sequence__ and __associative_sequence__.
as a model of __random_access_sequence__ and __associative_sequence__.
The sequence `(template_param0)(template_param1)...` declares the names of
the template type parameters used.
The sequence `(specialization_param0)(specialization_param1)...`
@ -914,7 +914,7 @@ The actual return type of fusion's intrinsic sequence access (meta-)functions
when in invoked with (an instance of) `type_name` is a proxy type.
This type is implicitly convertible to the attribute type via [^get_expr['N]] and
forwards assignment to the underlying element via [^set_expr['N]].
The value type (that is the type returned by __result_of_value_of__, __result_of_value_of_data__,
The value type (that is the type returned by __result_of_value_of__, __result_of_value_of_data__,
__result_of_value_at__, __result_of_value_at_c__ and __result_of_value_at_key__) of the ['N]th element
is [^attribute_type['N]] with const-qualifier and reference removed.
@ -925,7 +925,7 @@ namespace qualified name of the template class type to be adapted.
#include <boost/fusion/adapted/adt/adapt_assoc_adt.hpp>
#include <boost/fusion/include/adapt_assoc_adt.hpp>
[heading Example]
namespace demo
{
@ -935,48 +935,48 @@ namespace qualified name of the template class type to be adapted.
private:
Name name;
Age age;
public:
void set_name(Name const& n)
{
name=n;
}
void set_age(Age const& a)
{
age=a;
}
Name const& get_name()const
{
return name;
}
Age const& get_age()const
{
return age;
}
};
}
namespace keys
{
struct name;
struct age;
}
BOOST_FUSION_ADAPT_ASSOC_TPL_ADT(
(Name)(Age),
(demo::employee) (Name)(Age),
(Name const&, Name const&, obj.get_name(), obj.set_name(val), keys::name)
(Age const&, Age const&, obj.get_age(), obj.set_age(val), keys::age))
demo::employee<std::string, int> e;
at_key<keys::name>(e)="Edward Norton";
at_key<keys::age>(e)=41;
//Prints 'Edward Norton is 41 years old'
std::cout << e.get_name() << " is " << e.get_age() << " years old" << std::endl;
[heading See also]
__adt_attribute_proxy__
@ -1028,14 +1028,14 @@ defined in __random_access_sequence__.
[[`struct_name(e0, e1,... en)`] [Creates an instance of `struct_name` with elements `e0`...`en`.]]
[[`struct_name(fs)`] [Copy constructs an instance of `struct_name` from a __forward_sequence__ `fs`.]]
[[`str = fs`] [Assigns from a __forward_sequence__ `fs`.]]
[[`str.member_nameN`] [Access of struct member `member_nameN`]]
[[`str.member_nameN`] [Access of struct member `member_nameN`]]
]
[heading Header]
#include <boost/fusion/adapted/struct/define_struct.hpp>
#include <boost/fusion/include/define_struct.hpp>
[heading Example]
// demo::employee is a Fusion sequence
@ -1097,14 +1097,14 @@ defined in __random_access_sequence__.
[[`Str(e0, e1,... en)`] [Creates an instance of `Str` with elements `e0`...`en`.]]
[[`Str(fs)`] [Copy constructs an instance of `Str` from a __forward_sequence__ `fs`.]]
[[`str = fs`] [Assigns from a __forward_sequence__ `fs`.]]
[[`str.member_nameN`] [Access of struct member `member_nameN`]]
[[`str.member_nameN`] [Access of struct member `member_nameN`]]
]
[heading Header]
#include <boost/fusion/adapted/struct/define_struct.hpp>
#include <boost/fusion/include/define_struct.hpp>
[heading Example]
// Any instantiated demo::employee is a Fusion sequence
@ -1256,14 +1256,14 @@ defined in __random_access_sequence__ and __associative_sequence__.
[[`struct_name(e0, e1,... en)`] [Creates an instance of `struct_name` with elements `e0`...`en`.]]
[[`struct_name(fs)`] [Copy constructs an instance of `struct_name` from a __forward_sequence__ `fs`.]]
[[`str = fs`] [Assigns from a __forward_sequence__ `fs`.]]
[[`str.member_nameN`] [Access of struct member `member_nameN`]]
[[`str.member_nameN`] [Access of struct member `member_nameN`]]
]
[heading Header]
#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
#include <boost/fusion/include/define_assoc_struct.hpp>
[heading Example]
namespace keys
@ -1271,7 +1271,7 @@ defined in __random_access_sequence__ and __associative_sequence__.
struct name;
struct age;
}
// demo::employee is a Fusion sequence
BOOST_FUSION_DEFINE_ASSOC_STRUCT(
(demo), employee,
@ -1332,14 +1332,14 @@ defined in __random_access_sequence__ and __associative_sequence__.
[[`Str(e0, e1,... en)`] [Creates an instance of `Str` with elements `e0`...`en`.]]
[[`Str(fs)`] [Copy constructs an instance of `Str` from a __forward_sequence__ `fs`.]]
[[`str = fs`] [Assigns from a __forward_sequence__ `fs`.]]
[[`str.member_nameN`] [Access of struct member `member_nameN`]]
[[`str.member_nameN`] [Access of struct member `member_nameN`]]
]
[heading Header]
#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
#include <boost/fusion/include/define_assoc_struct.hpp>
[heading Example]
namespace keys
@ -1347,7 +1347,7 @@ defined in __random_access_sequence__ and __associative_sequence__.
struct name;
struct age;
}
// Any instantiated demo::employee is a Fusion sequence
BOOST_FUSION_DEFINE_ASSOC_TPL_STRUCT(
(Name)(Age), (demo), employee,

View File

@ -134,7 +134,7 @@ the first call) and [arg_desc] of `seq`.
>
typename result_of_name_macro<Sequence, State const, F>::type name_macro(
Sequence& seq, State const& initial_state, F f);
template<
typename Sequence,
typename State,

View File

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

View File

@ -635,7 +635,7 @@ including any Fusion header to change the default. Example:
[heading Model of]
* __associative_sequence__
* __forward_sequence__
* __random_access_sequence__
[variablelist Notation
[[`M`] [A `map` type]]
@ -647,7 +647,7 @@ including any Fusion header to change the default. Example:
[heading Expression Semantics]
Semantics of an expression is defined only where it differs from, or is not
defined in __random_access_sequence__ and __associative_sequence__.
defined in __forward_sequence__ and __associative_sequence__.
[table
[[Expression] [Semantics]]
@ -949,7 +949,7 @@ Create a __map__ from one or more key/data pairs.
, typename T0, typename T1,... typename TN>
typename __result_of_make_map__<K0, K0,... KN, T0, T1,... TN>::type
make_map(T0 const& x0, T1 const& x1... TN const& xN);
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
@ -1357,8 +1357,8 @@ rules for __element_conversion__.
[heading Header]
#include <boost/fusion/container/generation/make_list.hpp>
#include <boost/fusion/include/make_list.hpp>
#include <boost/fusion/container/generation/make_vector.hpp>
#include <boost/fusion/include/make_vector.hpp>
[heading Example]

View File

@ -66,9 +66,9 @@ function objects to accept arbitrary calls. In other words, an unary function
object can be implemented instead of (maybe heavily overloaded) function
templates or function call operators.
The library provides both a strictly typed and a generic variant for this
The library provides both a strictly typed and a generic variant for this
transformation. The latter should be used in combination with
__boost_func_forward__ to attack __the_forwarding_problem__.
__boost_func_forward__ to attack __the_forwarding_problem__.
Both variants have a corresponding generator function template that returns an
adapter instance for the given argument.
@ -546,7 +546,7 @@ Returns the result type of __invoke_function_object__.
[heading Macros]
The following macros can be defined to change the maximum arity.
The following macros can be defined to change the maximum arity.
The default is 6.
* BOOST_FUSION_INVOKE_MAX_ARITY
@ -1060,7 +1060,7 @@ signature is optimized automatically to avoid by-value parameters.]
[heading Macros]
The following macros can be defined to change the maximum arity.
The following macros can be defined to change the maximum arity.
The value used for these macros must not exceed `FUSION_MAX_VECTOR_SIZE`.
The default is 6.

View File

@ -9,7 +9,7 @@
===============================================================================/]
[library Fusion
[quickbook 1.3]
[version 2.1]
[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]
[purpose Statically Typed Heterogeneous Data Structures and Algorithms]

View File

@ -1,16 +1,277 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<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/">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Chapter&#160;1.&#160;Fusion 2.2</title>
<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
<link rel="home" href="index.html" title="Chapter&#160;1.&#160;Fusion 2.2">
<link rel="next" href="fusion/preface.html" title="Preface">
</head>
<body>
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 bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td>
<td align="center"><a href="../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav"><a accesskey="n" href="fusion/preface.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a></div>
<div class="chapter">
<div class="titlepage"><div>
<div><h2 class="title">
<a name="fusion"></a>Chapter&#160;1.&#160;Fusion 2.2</h2></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Joel</span> <span class="surname">de Guzman</span>
</h3></div></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Dan</span> <span class="surname">Marsden</span>
</h3></div></div>
<div><div class="author"><h3 class="author">
<span class="firstname">Tobias</span> <span class="surname">Schwinger</span>
</h3></div></div>
<div><p class="copyright">Copyright &#169; 2001-2006, 2011, 2012 Joel de Guzman,
Dan Marsden, Tobias Schwinger</p></div>
<div><div class="legalnotice">
<a name="fusion.legal"></a><p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></div>
</div></div>
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="section"><a href="fusion/preface.html">Preface</a></span></dt>
<dt><span class="section"><a href="fusion/introduction.html">Introduction</a></span></dt>
<dt><span class="section"><a href="fusion/quick_start.html">Quick Start</a></span></dt>
<dt><span class="section"><a href="fusion/organization.html">Organization</a></span></dt>
<dt><span class="section"><a href="fusion/support.html">Support</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/support/is_sequence.html">is_sequence</a></span></dt>
<dt><span class="section"><a href="fusion/support/is_view.html">is_view</a></span></dt>
<dt><span class="section"><a href="fusion/support/tag_of.html">tag_of</a></span></dt>
<dt><span class="section"><a href="fusion/support/category_of.html">category_of</a></span></dt>
<dt><span class="section"><a href="fusion/support/deduce.html">deduce</a></span></dt>
<dt><span class="section"><a href="fusion/support/deduce_sequence.html">deduce_sequence</a></span></dt>
<dt><span class="section"><a href="fusion/support/pair.html">pair</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator.html">Iterator</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/concepts.html">Concepts</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/concepts/forward_iterator.html">Forward
Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/bidirectional_iterator.html">Bidirectional
Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/random_access_iterator.html">Random
Access Iterator</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/concepts/associative_iterator.html">Associative
Iterator</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator/functions.html">Functions</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/functions/deref.html">deref</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/next.html">next</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/prior.html">prior</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/distance.html">distance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/advance.html">advance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/advance_c.html">advance_c</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/functions/deref_data.html">deref_data</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator/operator.html">Operator</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/operator/operator_unary_star.html">Operator
*</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/operator/operator_equality.html">Operator
==</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/operator/operator_inequality.html">Operator
!=</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/iterator/metafunctions.html">Metafunctions</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/iterator/metafunctions/value_of.html">value_of</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/deref.html">deref</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/next.html">next</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/prior.html">prior</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/equal_to.html">equal_to</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/distance.html">distance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/advance.html">advance</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/advance_c.html">advance_c</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/key_of.html">key_of</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/value_of_data.html">value_of_data</a></span></dt>
<dt><span class="section"><a href="fusion/iterator/metafunctions/deref_data.html">deref_data</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="section"><a href="fusion/sequence.html">Sequence</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/concepts.html">Concepts</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/concepts/forward_sequence.html">Forward
Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/bidirectional_sequence.html">Bidirectional
Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/random_access_sequence.html">Random
Access Sequence</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/concepts/associative_sequence.html">Associative
Sequence</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/sequence/intrinsic.html">Intrinsic</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/intrinsic/functions.html">Functions</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/intrinsic/metafunctions.html">Metafunctions</a></span></dt>
</dl></dd>
<dt><span class="section"><a href="fusion/sequence/operator.html">Operator</a></span></dt>
<dd><dl>
<dt><span class="section"><a href="fusion/sequence/operator/i_o.html">I/O</a></span></dt>
<dt><span class="section"><a href="fusion/sequence/operator/comparison.html">Comparison</a></span></dt>
</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>
</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></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>
</html>

View File

@ -161,6 +161,7 @@ the following invariants always hold:
* __std_pair__ iterator
* __boost_array__ iterator
* __vector__ iterator
* __map__ iterator
* __single_view__ iterator
* __iterator_range__ (where adapted sequence is a __bidirectional_sequence__)
* __transform_view__ (where adapted sequence is a __bidirectional_sequence__)
@ -206,6 +207,7 @@ the following expressions must be valid:
[heading Models]
* __vector__ iterator
* __map__ iterator
* __std_pair__ iterator
* __boost_array__ iterator
* __single_view__ iterator
@ -492,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(I const& i);
typename __result_of_deref_data__<I>::type deref_data(I const& i);
[table Parameters
[[Parameter] [Requirement] [Description]]
@ -993,9 +995,9 @@ Returns the key type associated with the element referenced by an associative it
[heading Example]
typedef __map__<__pair__<float,int> > vec;
typedef __result_of_begin__<vec>::type first;
BOOST_MPL_ASSERT((boost::is_same<__result_of_key_of__<first>::type, float>));
[endsect]
[section value_of_data]
@ -1032,9 +1034,9 @@ Returns the type of the data property associated with the element referenced by
[heading Example]
typedef __map__<__pair__<float,int> > vec;
typedef __result_of_begin__<vec>::type first;
BOOST_MPL_ASSERT((boost::is_same<__result_of_value_of_data__<first>::type, int>));
[endsect]
[section deref_data]

View File

@ -168,7 +168,7 @@ and __deref_data__) is a proxy type, an instance of
has three template arguments:
namespace boost { namespace fusion { namespace extension
{
{
template<
typename Type
, int Index
@ -176,14 +176,14 @@ has three template arguments:
>
struct adt_attribute_proxy;
}}}
When adapting a class type, `adt_attribute_proxy` is specialized for every
element of the adapted sequence, with `Type` being the class type that is
adapted, `Index` the 0-based indices of the elements, and `Const` both `true`
and `false`. The return type of fusion's intrinsic sequence access functions
for the ['N]th element of an adapted class type `type_name` is
[^adt_attribute_proxy<type_name, ['N], ['Const]>], with [^['Const]] being `true`
for constant instances of `type_name` and `false` for non-constant ones.
for constant instances of `type_name` and `false` for non-constant ones.
[variablelist Notation
[[`type_name`]
@ -205,7 +205,7 @@ for constant instances of `type_name` and `false` for non-constant ones.
]
[*Expression Semantics]
[table
[[Expression] [Semantics]]
[[[^proxy_type['N](inst)]] [Creates an instance of [^proxy_type['N]] with underlying object `inst`]]

View File

@ -142,8 +142,8 @@ __bidirectional_iterator__.
__forward_sequence__
[variablelist Notation
[[`s`] [A Forward Sequence]]
[[`S`] [A Forward Sequence type]]
[[`s`] [A Bidirectional Sequence]]
[[`S`] [A Bidirectional Sequence type]]
[[`o`] [An arbitrary object]]
[[`e`] [A Sequence element]]
]
@ -189,6 +189,7 @@ are not defined in __forward_sequence__.
* __std_pair__
* __boost_array__
* __vector__
* __map__
* __reverse_view__
* __single_view__
* __iterator_range__ (where adapted sequence is a Bidirectional Sequence)
@ -212,7 +213,8 @@ __bidirectional_sequence__
[variablelist Notation
[[`s`] [A Random Access Sequence]]
[[`S`] [A Random Access Sequence type]]
[[`N`] [An __mpl_integral_constant__]]
[[`M`] [An __mpl__ integral constant]]
[[`N`] [An integral constant]]
[[`o`] [An arbitrary object]]
[[`e`] [A Sequence element]]
]
@ -226,12 +228,18 @@ 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__<N>(s)`] [Any type] [] [Constant]]
[[`__at__<N>(s) = o`] [Any type] [`s` is mutable and
[[`__at_c__<N>(s)`] [Any type] [] [Constant]]
[[`__at_c__<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]]
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]]
]
[heading Result Type Expressions]
@ -257,7 +265,8 @@ are not defined in __bidirectional_sequence__.
[table
[[Expression] [Semantics]]
[[`__at__<N>(s)`] [The Nth element from the beginning of the sequence; see __at__.]]
[[`__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__.]]
]
[heading Models]
@ -265,6 +274,7 @@ are not defined in __bidirectional_sequence__.
* __std_pair__
* __boost_array__
* __vector__
* __map__
* __reverse_view__
* __single_view__
* __iterator_range__ (where adapted sequence is a Random Access Sequence)
@ -281,6 +291,7 @@ 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]]
@ -640,15 +651,15 @@ in the sequence.
[heading Description]
Returns the N-th element from the beginning of the sequence.
Returns the M-th element from the beginning of the sequence.
[heading Synopsis]
template <typename N, typename Sequence>
template <typename M, typename Sequence>
typename __result_of_at__<Sequence, N>::type
at(Sequence& seq);
template <typename N, typename Sequence>
template <typename M, typename Sequence>
typename __result_of_at__<Sequence const, N>::type
at(Sequence const& seq);
@ -657,25 +668,25 @@ Returns the N-th element from the beginning of the sequence.
[table
[[Parameter] [Requirement] [Description]]
[[`seq`] [Model of __random_access_sequence__] [The sequence we wish to investigate.]]
[[`N`] [An __mpl_integral_constant__] [An index from the beginning of the
[[`M`] [An __mpl_integral_constant__] [An index from the beginning of the
sequence.]]
]
[heading Expression Semantics]
at<N>(seq);
at<M>(seq);
[*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
[*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
element from the beginning of the sequence, is a valid expression. Else,
returns a type convertable to the N-th element from the beginning of the
returns a type convertable to the M-th element from the beginning of the
sequence.
[*Precondition]: `0 <= N::value < __size__(s)`
[*Precondition]: `0 <= M::value < __size__(s)`
[*Semantics]: Equivalent to
__deref__(__advance__<N>(__begin__(s)))
__deref__(__advance__<M>(__begin__(s)))
[heading Header]
@ -848,7 +859,7 @@ Performs an element by element swap of the elements in 2 sequences.
[table
[[Parameters] [Requirement] [Description]]
[[`seq1`, `seq2`] [Models of __forward_sequence__][The sequences whos elements we wish to swap.]]
[[`seq1`, `seq2`][Models of __forward_sequence__][The sequences whos elements we wish to swap.]]
]
[heading Expression Semantics]
@ -1113,7 +1124,7 @@ the actual element type, use __result_of_value_at__].
[heading Synopsis]
template<
typename Seq,
typename N>
typename M>
struct at
{
typedef __unspecified__ type;
@ -1122,15 +1133,15 @@ the actual element type, use __result_of_value_at__].
[table Parameters
[[Parameter] [Requirement] [Description]]
[[`Seq`][A model of __random_access_sequence__][Argument sequence]]
[[`N`][An __mpl_integral_constant__][Index of element]]
[[`M`][An __mpl_integral_constant__][Index of element]]
]
[heading Expression Semantics]
result_of::at<Seq, N>::type
result_of::at<Seq, M>::type
[*Return type]: Any type.
[*Semantics]: Returns the result type of using __at__ to access the `N`th element of `Seq`.
[*Semantics]: Returns the result type of using __at__ to access the `M`th element of `Seq`.
[heading Header]
@ -1155,7 +1166,7 @@ get the actual element type, use __result_of_value_at_c__].
[heading Synopsis]
template<
typename Seq,
int M>
int N>
struct at_c
{
typedef __unspecified__ type;
@ -1164,15 +1175,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]]
[[`M`][Positive integer index][Index of element]]
[[`N`][Positive integer index][Index of element]]
]
[heading Expression Semantics]
result_of::at_c<Seq, M>::type
result_of::at_c<Seq, N>::type
[*Return type]: Any type
[*Semantics]: Returns the result type of using __at_c__ to access the `M`th element of `Seq`.
[*Semantics]: Returns the result type of using __at_c__ to access the `N`th element of `Seq`.
[heading Header]
@ -1194,7 +1205,7 @@ Returns the actual type at a given index from the __sequence__.
[heading Synopsis]
template<
typename Seq,
typename N>
typename M>
struct value_at
{
typedef __unspecified__ type;
@ -1203,15 +1214,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`][An __mpl_integral_constant__][Index of element]]
[[`M`][An __mpl_integral_constant__][Index of element]]
]
[heading Expression Semantics]
result_of::value_at<Seq, N>::type
result_of::value_at<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]
@ -1233,7 +1244,7 @@ Returns the actual type at a given index from the __sequence__.
[heading Synopsis]
template<
typename Seq,
int M>
int N>
struct value_at_c
{
typedef __unspecified__ type;
@ -1242,15 +1253,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`][Positive integer index][Index of element]]
[[`N`][Positive integer index][Index of element]]
]
[heading Expression Semantics]
result_of::value_at_c<Seq, M>::type
result_of::value_at_c<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]
@ -1376,7 +1387,7 @@ Returns the actual element type associated with a Key from the __sequence__.
#include <boost/fusion/sequence/intrinsic/value_at_key.hpp>
#include <boost/fusion/include/value_at_key.hpp>
[heading Example]
typedef __map__<__pair__<int, char>, __pair__<char, char>, __pair__<double, char> > mymap;
BOOST_MPL_ASSERT((boost::is_same<__result_of_at_key__<mymap, int>::type, char>));

View File

@ -91,7 +91,7 @@ Where `Vi` is `X&` if the cv-unqualified type `Ti` is `reference_wrapper<X>`, ot
template<typename T1, typename T2, ..., typename 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 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 no effect.
[endsect]
@ -254,7 +254,7 @@ The __tr1__tuple__ interface is specified to provide uniform access to `std::pai
[*Type]: `T2`
[*Value]: Returns thetype of the second element of the pair
[*Value]: Returns the type of the second element of the pair
template<int I, typename T1, typename T2>
P& get(std::pair<T1, T2>& pr);

View File

@ -483,7 +483,7 @@ defined in the implemented models.
[heading Description]
`nview` presents a view which iterates over a given __sequence__ in a specified order.
`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 indicies specifying
the elements to iterate over.
@ -507,15 +507,15 @@ the elements to iterate over.
[[Parameter] [Description] [Default]]
[[`Sequence`] [An arbitrary Fusion __forward_sequence__]
[]]
[[`Indicies`] [A `mpl::vector_c<int, ...>` holding the indicies 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
[[`I1`, `I2`, `I3`...] [A list of integers specifying the required
iteration order.] [`INT_MAX` for `I2`, `I3`...]]
]
[heading Model of]
* __random_access_sequence__ (see __traversal_concept__)
* __random_access_sequence__ (see __traversal_concept__)
[variablelist Notation
[[`NV`] [A `nview` type]]

View File

@ -3,7 +3,7 @@
Copyright (c) 2011 Nathan Ridge
Copyright (c) 2006 Dan Marsden
Distributed under the Boost Software License, Version 1.0. (See accompanying
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)
==============================================================================*/

View File

@ -18,7 +18,7 @@
// The std_tuple_iterator adaptor only supports implementations
// using variadic templates
#if !defined(BOOST_NO_VARIADIC_TEMPLATES)
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/fusion/adapted/std_tuple.hpp>
#endif

View File

@ -19,10 +19,10 @@ namespace boost { namespace fusion
{
namespace detail
{
template <typename T, typename Dummy>
struct get_identity
: remove_const<typename remove_reference<T>::type>
{};
template <typename T, typename Dummy>
struct get_identity
: remove_const<typename remove_reference<T>::type>
{};
}
namespace extension

View File

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

View File

@ -8,6 +8,7 @@
#ifndef BOOST_FUSION_ADAPTED_STRUCT_DETAIL_DEFINE_STRUCT_INLINE_HPP
#define BOOST_FUSION_ADAPTED_STRUCT_DETAIL_DEFINE_STRUCT_INLINE_HPP
#include <boost/config.hpp>
#include <boost/fusion/support/category_of.hpp>
#include <boost/fusion/sequence/sequence_facade.hpp>
#include <boost/fusion/iterator/iterator_facade.hpp>
@ -20,12 +21,37 @@
#include <boost/mpl/if.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/preprocessor/comma_if.hpp>
#include <boost/preprocessor/facilities/is_empty.hpp>
#include <boost/preprocessor/repeat.hpp>
#include <boost/preprocessor/seq/for_each_i.hpp>
#include <boost/preprocessor/seq/size.hpp>
#include <boost/preprocessor/seq/enum.hpp>
#include <boost/preprocessor/seq/seq.hpp>
#include <boost/preprocessor/tuple/elem.hpp>
// MSVC and GCC <= 4.4 have a bug that affects partial specializations of
// nested templates under some circumstances. This affects the implementation
// of BOOST_FUSION_DEFINE_STRUCT_INLINE, which uses such specializations for
// the iterator class's 'deref' and 'value_of' metafunctions. On these compilers
// an alternate implementation for these metafunctions is used that does not
// require such specializations. The alternate implementation takes longer
// to compile so its use is restricted to the offending compilers.
// For MSVC, the bug was reported at https://connect.microsoft.com/VisualStudio/feedback/details/757891/c-compiler-error-involving-partial-specializations-of-nested-templates
// For GCC, 4.4 and earlier are no longer maintained so there is no need
// to report a bug.
#if defined(BOOST_MSVC) || (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ <= 4)))
#define BOOST_FUSION_NEED_NESTED_TEMPLATE_PARTIAL_SPEC_WKND
#endif
#ifdef BOOST_FUSION_NEED_NESTED_TEMPLATE_PARTIAL_SPEC_WKND
#include <boost/type_traits/add_const.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/mpl/if.hpp>
#include <boost/fusion/sequence/intrinsic/at_c.hpp>
#include <boost/fusion/container/vector.hpp>
#endif
#define BOOST_FUSION_MAKE_DEFAULT_INIT_LIST_ENTRY(R, DATA, N, ATTRIBUTE) \
BOOST_PP_COMMA_IF(N) BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE)()
@ -61,15 +87,20 @@
BOOST_PP_COMMA_IF(N) \
BOOST_FUSION_MAKE_INIT_LIST_ENTRY_I(BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE))
#define BOOST_FUSION_ITERATOR_NAME(NAME) \
BOOST_PP_CAT(boost_fusion_detail_, BOOST_PP_CAT(NAME, _iterator))
// Note: all template parameter names need to be uglified, otherwise they might
// shadow a template parameter of the struct when used with
// BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE
#define BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS(Z, N, NAME) \
template <typename boost_fusion_uglified_Sq> \
struct value_of<NAME##_iterator<boost_fusion_uglified_Sq, N> > \
template <typename boost_fusion_detail_Sq> \
struct value_of< \
BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, N> \
> \
: boost::mpl::identity< \
typename boost_fusion_uglified_Sq::t##N##_type \
typename boost_fusion_detail_Sq::t##N##_type \
> \
{ \
};
@ -77,10 +108,10 @@
#define BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \
SPEC_TYPE, CALL_ARG_TYPE, TYPE_QUAL, ATTRIBUTE, N) \
\
template <typename boost_fusion_uglified_Sq> \
template <typename boost_fusion_detail_Sq> \
struct deref<SPEC_TYPE, N> > \
{ \
typedef typename boost_fusion_uglified_Sq::t##N##_type TYPE_QUAL& type; \
typedef typename boost_fusion_detail_Sq::t##N##_type TYPE_QUAL& type; \
static type call(CALL_ARG_TYPE, N> const& iter) \
{ \
return iter.seq_.BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \
@ -89,48 +120,48 @@
#define BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS(R, NAME, N, ATTRIBUTE) \
BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \
BOOST_PP_CAT(NAME, _iterator)<boost_fusion_uglified_Sq, \
BOOST_PP_CAT(NAME, _iterator)<boost_fusion_uglified_Sq, \
BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, \
BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, \
, \
ATTRIBUTE, \
N) \
BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \
BOOST_PP_CAT(NAME, _iterator)<const boost_fusion_uglified_Sq, \
BOOST_PP_CAT(NAME, _iterator)<const boost_fusion_uglified_Sq, \
BOOST_FUSION_ITERATOR_NAME(NAME)<const boost_fusion_detail_Sq, \
BOOST_FUSION_ITERATOR_NAME(NAME)<const boost_fusion_detail_Sq, \
const, \
ATTRIBUTE, \
N) \
BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \
const BOOST_PP_CAT(NAME, _iterator)<boost_fusion_uglified_Sq, \
BOOST_PP_CAT(NAME, _iterator)<boost_fusion_uglified_Sq, \
const BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, \
BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, \
, \
ATTRIBUTE, \
N) \
BOOST_FUSION_MAKE_ITERATOR_DEREF_SPEC( \
const BOOST_PP_CAT(NAME, _iterator)<const boost_fusion_uglified_Sq, \
BOOST_PP_CAT(NAME, _iterator)<const boost_fusion_uglified_Sq, \
const BOOST_FUSION_ITERATOR_NAME(NAME)<const boost_fusion_detail_Sq, \
BOOST_FUSION_ITERATOR_NAME(NAME)<const boost_fusion_detail_Sq, \
const, \
ATTRIBUTE, \
N) \
#define BOOST_FUSION_MAKE_VALUE_AT_SPECS(Z, N, DATA) \
template <typename boost_fusion_uglified_Sq> \
struct value_at<boost_fusion_uglified_Sq, boost::mpl::int_<N> > \
template <typename boost_fusion_detail_Sq> \
struct value_at<boost_fusion_detail_Sq, boost::mpl::int_<N> > \
{ \
typedef typename boost_fusion_uglified_Sq::t##N##_type type; \
typedef typename boost_fusion_detail_Sq::t##N##_type type; \
};
#define BOOST_FUSION_MAKE_AT_SPECS(R, DATA, N, ATTRIBUTE) \
template <typename boost_fusion_uglified_Sq> \
struct at<boost_fusion_uglified_Sq, boost::mpl::int_<N> > \
template <typename boost_fusion_detail_Sq> \
struct at<boost_fusion_detail_Sq, boost::mpl::int_<N> > \
{ \
typedef typename boost::mpl::if_< \
boost::is_const<boost_fusion_uglified_Sq>, \
typename boost_fusion_uglified_Sq::t##N##_type const&, \
typename boost_fusion_uglified_Sq::t##N##_type& \
boost::is_const<boost_fusion_detail_Sq>, \
typename boost_fusion_detail_Sq::t##N##_type const&, \
typename boost_fusion_detail_Sq::t##N##_type& \
>::type type; \
\
static type call(boost_fusion_uglified_Sq& sq) \
static type call(boost_fusion_detail_Sq& sq) \
{ \
return sq. BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE); \
} \
@ -142,7 +173,100 @@
#define BOOST_FUSION_MAKE_DATA_MEMBER(R, DATA, N, ATTRIBUTE) \
BOOST_PP_TUPLE_ELEM(2, 0, ATTRIBUTE) BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE);
#ifdef BOOST_FUSION_NEED_NESTED_TEMPLATE_PARTIAL_SPEC_WKND
#define BOOST_FUSION_DEFINE_ITERATOR_VALUE_OF(NAME, ATTRIBUTE_SEQ_SIZE) \
template <typename boost_fusion_detail_Iterator> \
struct value_of : boost::fusion::result_of::at_c< \
ref_vec_t, \
boost_fusion_detail_Iterator::index::value \
> \
{ \
};
#define BOOST_FUSION_DEFINE_ITERATOR_DEREF(NAME, ATTRIBUTES_SEQ) \
template <typename boost_fusion_detail_Iterator> \
struct deref \
{ \
typedef typename boost::remove_const< \
boost_fusion_detail_Iterator \
>::type iterator_raw_type; \
\
static const int index = iterator_raw_type::index::value; \
\
typedef typename boost::fusion::result_of::at_c< \
ref_vec_t, \
index \
>::type result_raw_type; \
\
typedef typename boost::mpl::if_< \
boost::is_const<typename iterator_raw_type::sequence_type>, \
typename boost::add_const<result_raw_type>::type, \
result_raw_type \
>::type type; \
\
static type call(iterator_raw_type const& iter) \
{ \
return boost::fusion::at_c<index>(iter.ref_vec); \
} \
};
#define BOOST_FUSION_MAKE_ITERATOR_WKND_FIELD_NAME(R, DATA, N, ATTRIBUTE) \
BOOST_PP_COMMA_IF(N) seq.BOOST_PP_TUPLE_ELEM(2, 1, ATTRIBUTE)
#define BOOST_FUSION_DEFINE_ITERATOR_WKND_INIT_LIST_ENTRIES(ATTRIBUTES_SEQ) \
, ref_vec(BOOST_PP_SEQ_FOR_EACH_I( \
BOOST_FUSION_MAKE_ITERATOR_WKND_FIELD_NAME, \
~, \
BOOST_PP_SEQ_TAIL(ATTRIBUTES_SEQ)))
#define BOOST_FUSION_MAKE_ITERATOR_WKND_REF(Z, N, DATA) \
BOOST_PP_COMMA_IF(N) \
typename boost::mpl::if_< \
boost::is_const<boost_fusion_detail_Seq>, \
typename boost::add_const< \
typename boost_fusion_detail_Seq::t##N##_type \
>::type, \
typename boost_fusion_detail_Seq::t##N##_type \
>::type&
#define BOOST_FUSION_DEFINE_ITERATOR_WKND_MEMBERS(ATTRIBUTES_SEQ_SIZE) \
typedef boost::fusion::vector< \
BOOST_PP_REPEAT( \
ATTRIBUTES_SEQ_SIZE, \
BOOST_FUSION_MAKE_ITERATOR_WKND_REF, \
~) \
> ref_vec_t; \
\
ref_vec_t ref_vec;
#else
#define BOOST_FUSION_DEFINE_ITERATOR_VALUE_OF(NAME, ATTRIBUTES_SEQ_SIZE) \
template <typename boost_fusion_detail_T> struct value_of; \
BOOST_PP_REPEAT( \
ATTRIBUTES_SEQ_SIZE, \
BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS, \
NAME)
#define BOOST_FUSION_DEFINE_ITERATOR_DEREF(NAME, ATTRIBUTES_SEQ) \
template <typename boost_fusion_detail_T> struct deref; \
BOOST_PP_SEQ_FOR_EACH_I( \
BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS, \
NAME, \
ATTRIBUTES_SEQ)
#define BOOST_FUSION_DEFINE_ITERATOR_WKND_INIT_LIST_ENTRIES(ATTRIBUTES_SEQ)
#define BOOST_FUSION_DEFINE_ITERATOR_WKND_MEMBERS(ATTRIBUTES_SEQ_SIZE)
#endif // BOOST_FUSION_NEED_NESTED_TEMPLATE_PARTIAL_SPEC_WKND
// Note: We can't nest the iterator inside the struct because we run into
// a MSVC10 bug involving partial specializations of nested templates.
#define BOOST_FUSION_DEFINE_STRUCT_INLINE_IMPL(NAME, ATTRIBUTES) \
BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR(NAME, ATTRIBUTES) \
struct NAME : boost::fusion::sequence_facade< \
NAME, \
boost::fusion::random_access_traversal_tag \
@ -154,6 +278,8 @@
#define BOOST_FUSION_DEFINE_TPL_STRUCT_INLINE_IMPL( \
TEMPLATE_PARAMS_SEQ, NAME, ATTRIBUTES) \
\
BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR(NAME, ATTRIBUTES) \
\
template < \
BOOST_FUSION_ADAPT_STRUCT_UNPACK_TEMPLATE_PARAMS_IMPL( \
(0)TEMPLATE_PARAMS_SEQ) \
@ -173,176 +299,198 @@
NAME, \
BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END))
// Note: can't compute BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ) directly because
// ATTRIBUTES_SEQ may be empty and calling BOOST_PP_SEQ_SIZE on an empty
// sequence produces warnings on MSVC.
#define BOOST_FUSION_DEFINE_STRUCT_MEMBERS_IMPL(NAME, ATTRIBUTES_SEQ) \
BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \
NAME, \
ATTRIBUTES_SEQ, \
BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ))
BOOST_PP_DEC(BOOST_PP_SEQ_SIZE((0)ATTRIBUTES_SEQ)))
#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \
#define BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR(NAME, ATTRIBUTES) \
BOOST_FUSION_DEFINE_STRUCT_ITERATOR_IMPL( \
NAME, \
BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_FILLER_0 ATTRIBUTES,_END))
#define BOOST_FUSION_DEFINE_STRUCT_ITERATOR_IMPL(NAME, ATTRIBUTES_SEQ) \
BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \
NAME, \
ATTRIBUTES_SEQ, \
BOOST_PP_DEC(BOOST_PP_SEQ_SIZE((0)ATTRIBUTES_SEQ)))
#define BOOST_FUSION_DEFINE_STRUCT_INLINE_ITERATOR_IMPL_IMPL( \
NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \
\
NAME() \
BOOST_PP_IF( \
BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \
BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \
BOOST_FUSION_IGNORE_1) \
(ATTRIBUTES_SEQ) \
{ \
} \
\
BOOST_PP_IF( \
BOOST_PP_SEQ_SIZE(ATTRIBUTES_SEQ), \
BOOST_FUSION_MAKE_COPY_CONSTRUCTOR, \
BOOST_FUSION_IGNORE_2) \
(NAME, ATTRIBUTES_SEQ) \
\
template <typename boost_fusion_uglified_Seq> \
NAME(const boost_fusion_uglified_Seq& rhs) \
{ \
boost::fusion::copy(rhs, *this); \
} \
\
template <typename boost_fusion_uglified_Seq> \
NAME& operator=(const boost_fusion_uglified_Seq& rhs) \
{ \
boost::fusion::copy(rhs, *this); \
return *this; \
} \
\
template <typename boost_fusion_uglified_Seq, int N> \
struct NAME##_iterator \
template <typename boost_fusion_detail_Seq, int N> \
struct BOOST_FUSION_ITERATOR_NAME(NAME) \
: boost::fusion::iterator_facade< \
NAME##_iterator<boost_fusion_uglified_Seq, N>, \
BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Seq, N>, \
boost::fusion::random_access_traversal_tag \
> \
{ \
typedef boost::mpl::int_<N> index; \
typedef boost_fusion_uglified_Seq sequence_type; \
typedef boost_fusion_detail_Seq sequence_type; \
\
NAME##_iterator(boost_fusion_uglified_Seq& seq) : seq_(seq) {} \
BOOST_FUSION_ITERATOR_NAME(NAME)(boost_fusion_detail_Seq& seq) \
: seq_(seq) \
BOOST_FUSION_DEFINE_ITERATOR_WKND_INIT_LIST_ENTRIES( \
(0)ATTRIBUTES_SEQ) \
{} \
\
boost_fusion_uglified_Seq& seq_; \
boost_fusion_detail_Seq& seq_; \
\
template <typename boost_fusion_uglified_T> struct value_of; \
BOOST_PP_REPEAT( \
ATTRIBUTES_SEQ_SIZE, \
BOOST_FUSION_MAKE_ITERATOR_VALUE_OF_SPECS, \
NAME) \
BOOST_FUSION_DEFINE_ITERATOR_WKND_MEMBERS(ATTRIBUTES_SEQ_SIZE) \
\
template <typename boost_fusion_uglified_T> struct deref; \
BOOST_PP_SEQ_FOR_EACH_I( \
BOOST_FUSION_MAKE_ITERATOR_DEREF_SPECS, \
NAME, \
ATTRIBUTES_SEQ) \
BOOST_FUSION_DEFINE_ITERATOR_VALUE_OF(NAME, ATTRIBUTES_SEQ_SIZE) \
\
template <typename boost_fusion_uglified_It> \
BOOST_FUSION_DEFINE_ITERATOR_DEREF(NAME, ATTRIBUTES_SEQ) \
\
template <typename boost_fusion_detail_It> \
struct next \
{ \
typedef NAME##_iterator< \
typename boost_fusion_uglified_It::sequence_type, \
boost_fusion_uglified_It::index::value + 1 \
typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \
typename boost_fusion_detail_It::sequence_type, \
boost_fusion_detail_It::index::value + 1 \
> type; \
\
static type call(boost_fusion_uglified_It const& it) \
static type call(boost_fusion_detail_It const& it) \
{ \
return type(it.seq_); \
} \
}; \
\
template <typename boost_fusion_uglified_It> \
template <typename boost_fusion_detail_It> \
struct prior \
{ \
typedef NAME##_iterator< \
typename boost_fusion_uglified_It::sequence_type, \
boost_fusion_uglified_It::index::value - 1 \
typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \
typename boost_fusion_detail_It::sequence_type, \
boost_fusion_detail_It::index::value - 1 \
> type; \
\
static type call(boost_fusion_uglified_It const& it) \
static type call(boost_fusion_detail_It const& it) \
{ \
return type(it.seq_); \
} \
}; \
\
template < \
typename boost_fusion_uglified_It1, \
typename boost_fusion_uglified_It2 \
typename boost_fusion_detail_It1, \
typename boost_fusion_detail_It2 \
> \
struct distance \
{ \
typedef typename boost::mpl::minus< \
typename boost_fusion_uglified_It2::index, \
typename boost_fusion_uglified_It1::index \
typename boost_fusion_detail_It2::index, \
typename boost_fusion_detail_It1::index \
>::type type; \
\
static type call(boost_fusion_uglified_It1 const& it1, \
boost_fusion_uglified_It2 const& it2) \
static type call(boost_fusion_detail_It1 const& it1, \
boost_fusion_detail_It2 const& it2) \
{ \
return type(); \
} \
}; \
\
template < \
typename boost_fusion_uglified_It, \
typename boost_fusion_uglified_M \
typename boost_fusion_detail_It, \
typename boost_fusion_detail_M \
> \
struct advance \
{ \
typedef NAME##_iterator< \
typename boost_fusion_uglified_It::sequence_type, \
boost_fusion_uglified_It::index::value \
+ boost_fusion_uglified_M::value \
typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \
typename boost_fusion_detail_It::sequence_type, \
boost_fusion_detail_It::index::value \
+ boost_fusion_detail_M::value \
> type; \
\
static type call(boost_fusion_uglified_It const& it) \
static type call(boost_fusion_detail_It const& it) \
{ \
return type(it.seq_); \
} \
}; \
}; \
};
#define BOOST_FUSION_DEFINE_STRUCT_INLINE_MEMBERS_IMPL_IMPL( \
NAME, ATTRIBUTES_SEQ, ATTRIBUTES_SEQ_SIZE) \
\
template <typename boost_fusion_uglified_Sq> \
/* Note: second BOOST_PP_IF is necessary to avoid MSVC warning when */ \
/* calling BOOST_FUSION_IGNORE_1 with no arguments. */ \
NAME() \
BOOST_PP_IF( \
ATTRIBUTES_SEQ_SIZE, \
BOOST_FUSION_MAKE_DEFAULT_INIT_LIST, \
BOOST_FUSION_IGNORE_1) \
(BOOST_PP_IF( \
ATTRIBUTES_SEQ_SIZE, \
ATTRIBUTES_SEQ, \
0)) \
{ \
} \
\
BOOST_PP_IF( \
ATTRIBUTES_SEQ_SIZE, \
BOOST_FUSION_MAKE_COPY_CONSTRUCTOR, \
BOOST_FUSION_IGNORE_2) \
(NAME, ATTRIBUTES_SEQ) \
\
template <typename boost_fusion_detail_Seq> \
NAME(const boost_fusion_detail_Seq& rhs) \
{ \
boost::fusion::copy(rhs, *this); \
} \
\
template <typename boost_fusion_detail_Seq> \
NAME& operator=(const boost_fusion_detail_Seq& rhs) \
{ \
boost::fusion::copy(rhs, *this); \
return *this; \
} \
\
template <typename boost_fusion_detail_Sq> \
struct begin \
{ \
typedef NAME##_iterator<boost_fusion_uglified_Sq, 0> type; \
typedef BOOST_FUSION_ITERATOR_NAME(NAME)<boost_fusion_detail_Sq, 0> \
type; \
\
static type call(boost_fusion_uglified_Sq& sq) \
static type call(boost_fusion_detail_Sq& sq) \
{ \
return type(sq); \
} \
}; \
\
template <typename boost_fusion_uglified_Sq> \
template <typename boost_fusion_detail_Sq> \
struct end \
{ \
typedef NAME##_iterator< \
boost_fusion_uglified_Sq, \
typedef BOOST_FUSION_ITERATOR_NAME(NAME)< \
boost_fusion_detail_Sq, \
ATTRIBUTES_SEQ_SIZE \
> type; \
\
static type call(boost_fusion_uglified_Sq& sq) \
static type call(boost_fusion_detail_Sq& sq) \
{ \
return type(sq); \
} \
}; \
\
template <typename boost_fusion_uglified_Sq> \
template <typename boost_fusion_detail_Sq> \
struct size : boost::mpl::int_<ATTRIBUTES_SEQ_SIZE> \
{ \
}; \
\
template <typename boost_fusion_uglified_Sq> \
template <typename boost_fusion_detail_Sq> \
struct empty : boost::mpl::bool_<ATTRIBUTES_SEQ_SIZE == 0> \
{ \
}; \
\
template < \
typename boost_fusion_uglified_Sq, \
typename boost_fusion_uglified_N \
typename boost_fusion_detail_Sq, \
typename boost_fusion_detail_N \
> \
struct value_at : value_at< \
boost_fusion_uglified_Sq, \
boost::mpl::int_<boost_fusion_uglified_N::value> \
boost_fusion_detail_Sq, \
boost::mpl::int_<boost_fusion_detail_N::value> \
> \
{ \
}; \
@ -353,12 +501,12 @@
~) \
\
template < \
typename boost_fusion_uglified_Sq, \
typename boost_fusion_uglified_N \
typename boost_fusion_detail_Sq, \
typename boost_fusion_detail_N \
> \
struct at : at< \
boost_fusion_uglified_Sq, \
boost::mpl::int_<boost_fusion_uglified_N::value> \
boost_fusion_detail_Sq, \
boost::mpl::int_<boost_fusion_detail_N::value> \
> \
{ \
}; \

View File

@ -69,7 +69,7 @@ namespace boost { namespace fusion
copy(Seq1 const& src, Seq2& dest)
{
BOOST_STATIC_ASSERT(
result_of::size<Seq1>::value == result_of::size<Seq2>::value);
result_of::size<Seq1>::value <= result_of::size<Seq2>::value);
detail::sequence_copy<
Seq1 const, Seq2>::

View File

@ -0,0 +1,84 @@
/*=============================================================================
Copyright (c) 2001-2013 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(FUSION_MOVE_01192013_2225)
#define FUSION_MOVE_01192013_2225
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
#include <boost/fusion/sequence/comparison/detail/equal_to.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/config.hpp>
#include <boost/static_assert.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/ice.hpp>
#if defined (BOOST_MSVC)
# pragma warning(push)
# pragma warning (disable: 4100) // unreferenced formal parameter
#endif
namespace boost { namespace fusion
{
namespace detail
{
template <typename Seq1, typename Seq2>
struct sequence_move
{
typedef typename result_of::end<Seq1>::type end1_type;
typedef typename result_of::end<Seq2>::type end2_type;
template <typename I1, typename I2>
static void
call(I1 const&, I2 const&, mpl::true_)
{
}
template <typename I1, typename I2>
static void
call(I1 const& src, I2 const& dest, mpl::false_)
{
*dest = std::move(*src);
call(fusion::next(src), fusion::next(dest));
}
template <typename I1, typename I2>
static void
call(I1 const& src, I2 const& dest)
{
typename result_of::equal_to<I1, end1_type>::type eq;
return call(src, dest, eq);
}
};
}
template <typename Seq1, typename Seq2>
inline
typename
enable_if_c<
type_traits::ice_and<
traits::is_sequence<Seq1>::value
, traits::is_sequence<Seq2>::value
>::value,
void
>::type
move(Seq1&& src, Seq2& dest)
{
BOOST_STATIC_ASSERT(
result_of::size<Seq1>::value <= result_of::size<Seq2>::value);
detail::sequence_move<
Seq1, Seq2>::
call(fusion::begin(src), fusion::begin(dest));
}
}}
#if defined (BOOST_MSVC)
# pragma warning(pop)
#endif
#endif

View File

@ -116,7 +116,7 @@ namespace boost { namespace fusion
{
template<typename State, typename It0, typename F>
static Result
call(State const& state,It0 const& it0, F)
call(State const& state,It0 const&, F)
{
return static_cast<Result>(state);
}

View File

@ -115,7 +115,7 @@ namespace boost { namespace fusion
{
template<typename State, typename It0, typename F>
static Result
call(State const& state,It0 const& it0, F)
call(State const& state,It0 const&, F)
{
return static_cast<Result>(state);
}

View File

@ -109,7 +109,7 @@ namespace detail
struct unrolled_any<0>
{
template <typename It, typename F>
static bool call(It const& it, F f)
static bool call(It const&, F)
{
return false;
}

View File

@ -8,6 +8,7 @@
#if !defined(BOOST_FUSION_SEQUENCE_CONTAINER_DEQUE_24112006_2036)
#define BOOST_FUSION_SEQUENCE_CONTAINER_DEQUE_24112006_2036
#include <boost/fusion/container/deque/deque_fwd.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#include <boost/fusion/container/deque/convert.hpp>

View File

@ -31,7 +31,7 @@ namespace boost { namespace fusion
: base(val, deque)
{}
#if defined(BOOST_NO_RVALUE_REFERENCES)
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename Arg>
back_extended_deque(Deque const& deque, Arg& val)
: base(val, deque)

View File

@ -1,5 +1,5 @@
/*=============================================================================
Copyright (c) 2005-2012 Joel de Guzman
Copyright (c) 2005-2013 Joel de Guzman
Copyright (c) 2006 Dan Marsden
Distributed under the Boost Software License, Version 1.0. (See accompanying
@ -8,25 +8,32 @@
#if !defined(FUSION_CONVERT_20061213_2207)
#define FUSION_CONVERT_20061213_2207
#include <boost/fusion/container/deque/detail/as_deque.hpp>
#include <boost/fusion/container/deque/detail/convert_impl.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
///////////////////////////////////////////////////////////////////////////////
// C++03 (non-variadic) implementation
///////////////////////////////////////////////////////////////////////////////
#include <boost/fusion/container/deque/detail/cpp03/build_deque.hpp>
#else
///////////////////////////////////////////////////////////////////////////////
// C++11 variadic implementation
///////////////////////////////////////////////////////////////////////////////
#include <boost/fusion/container/deque/detail/build_deque.hpp>
namespace boost { namespace fusion
{
namespace result_of
{
template <typename Sequence>
struct as_deque
struct as_deque :
detail::build_deque<
typename result_of::begin<Sequence>::type
, typename result_of::end<Sequence>::type
>
{
typedef typename
detail::as_deque<result_of::size<Sequence>::value>
gen;
typedef typename gen::
template apply<typename result_of::begin<Sequence>::type>::type
type;
};
}
@ -34,17 +41,18 @@ namespace boost { namespace fusion
inline typename result_of::as_deque<Sequence>::type
as_deque(Sequence& seq)
{
typedef typename result_of::as_deque<Sequence>::gen gen;
return gen::call(fusion::begin(seq));
typedef result_of::as_deque<Sequence> gen;
return gen::call(fusion::begin(seq), fusion::end(seq));
}
template <typename Sequence>
inline typename result_of::as_deque<Sequence const>::type
as_deque(Sequence const& seq)
{
typedef typename result_of::as_deque<Sequence const>::gen gen;
return gen::call(fusion::begin(seq));
typedef result_of::as_deque<Sequence const> gen;
return gen::call(fusion::begin(seq), fusion::end(seq));
}
}}
#endif
#endif

View File

@ -8,27 +8,23 @@
#if !defined(BOOST_FUSION_DEQUE_26112006_1649)
#define BOOST_FUSION_DEQUE_26112006_1649
#include <boost/config.hpp>
# include <boost/fusion/container/deque/deque_fwd.hpp>
///////////////////////////////////////////////////////////////////////////////
// With no decltype and variadics, we will use the C++03 version
// Without variadics, we will use the PP version
///////////////////////////////////////////////////////////////////////////////
#if (defined(BOOST_NO_DECLTYPE) \
|| defined(BOOST_NO_VARIADIC_TEMPLATES) \
|| defined(BOOST_NO_RVALUE_REFERENCES))
# include <boost/fusion/container/deque/detail/cpp03_deque.hpp>
#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
# include <boost/fusion/container/deque/detail/cpp03/deque.hpp>
#else
# if !defined(BOOST_FUSION_HAS_CPP11_DEQUE)
# define BOOST_FUSION_HAS_CPP11_DEQUE
# endif
///////////////////////////////////////////////////////////////////////////////
// C++11 interface
///////////////////////////////////////////////////////////////////////////////
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/support/detail/access.hpp>
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
#include <boost/fusion/container/deque/detail/cpp11_deque_keyed_values.hpp>
#include <boost/fusion/container/deque/detail/deque_keyed_values.hpp>
#include <boost/fusion/container/deque/deque_fwd.hpp>
#include <boost/fusion/container/deque/detail/value_at_impl.hpp>
#include <boost/fusion/container/deque/detail/at_impl.hpp>
@ -36,8 +32,10 @@
#include <boost/fusion/container/deque/detail/end_impl.hpp>
#include <boost/fusion/container/deque/detail/is_sequence_impl.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/empty.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/and.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_convertible.hpp>
@ -48,6 +46,22 @@ namespace boost { namespace fusion
template <typename ...Elements>
struct deque : detail::nil_keyed_element
{
typedef deque_tag fusion_tag;
typedef bidirectional_traversal_tag category;
typedef mpl::int_<0> size;
typedef mpl::int_<0> next_up;
typedef mpl::int_<0> next_down;
typedef mpl::false_ is_view;
template <typename Sequence>
deque(Sequence const&,
typename enable_if<
mpl::and_<
traits::is_sequence<Sequence>
, result_of::empty<Sequence>>>::type* /*dummy*/ = 0)
{}
deque() {}
};
template <typename Head, typename ...Tail>
@ -60,7 +74,7 @@ namespace boost { namespace fusion
typedef typename detail::deque_keyed_values<Head, Tail...>::type base;
typedef mpl::int_<(sizeof ...(Tail) + 1)> size;
typedef mpl::int_<size::value> next_up;
typedef mpl::int_<mpl::int_<((size::value == 0) ? 0 : -1)>::type::value> next_down;
typedef mpl::int_<((size::value == 0) ? 0 : -1)> next_down;
typedef mpl::false_ is_view;
deque()
@ -71,11 +85,45 @@ namespace boost { namespace fusion
: base(seq)
{}
explicit deque(typename detail::call_param<Head>::type head
, typename detail::call_param<Tail>::type... tail)
: base(detail::deque_keyed_values<Head, Tail...>::call(head, tail...))
template <typename ...Elements>
deque(deque<Elements...>& seq)
: base(seq)
{}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename ...Elements>
deque(deque<Elements...>&& seq)
: base(std::forward<deque<Elements...>>(seq))
{}
#endif
deque(deque const& seq)
: base(seq)
{}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
deque(deque&& seq)
: base(std::forward<deque>(seq))
{}
#endif
explicit deque(Head const& head, Tail const&... tail)
: base(detail::deque_keyed_values<Head, Tail...>::construct(head, tail...))
{}
template <typename Head_, typename ...Tail_>
explicit deque(Head_ const& head, Tail_ const&... tail)
: base(detail::deque_keyed_values<Head_, Tail_...>::construct(head, tail...))
{}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename Head_, typename ...Tail_>
explicit deque(Head_&& head, Tail_&&... tail)
: base(detail::deque_keyed_values<Head, Tail...>
::forward_(std::forward<Head_>(head), std::forward<Tail_>(tail)...))
{}
#endif
template <typename Sequence>
explicit deque(Sequence const& seq
, typename disable_if<is_convertible<Sequence, Head> >::type* /*dummy*/ = 0)
@ -95,6 +143,16 @@ namespace boost { namespace fusion
base::operator=(rhs);
return *this;
}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename T>
deque& operator=(T&& rhs)
{
base::operator=(std::forward<T>(rhs));
return *this;
}
#endif
};
}}

View File

@ -13,13 +13,13 @@
///////////////////////////////////////////////////////////////////////////////
// With no decltype and variadics, we will use the C++03 version
///////////////////////////////////////////////////////////////////////////////
#if (defined(BOOST_NO_DECLTYPE) \
|| defined(BOOST_NO_VARIADIC_TEMPLATES) \
|| defined(BOOST_NO_RVALUE_REFERENCES))
# include <boost/fusion/container/deque/detail/cpp03_deque_fwd.hpp>
#if (defined(BOOST_NO_CXX11_DECLTYPE) \
|| defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) \
|| defined(BOOST_NO_CXX11_RVALUE_REFERENCES))
# include <boost/fusion/container/deque/detail/cpp03/deque_fwd.hpp>
#else
# if !defined(BOOST_FUSION_HAS_CPP11_DEQUE)
# define BOOST_FUSION_HAS_CPP11_DEQUE
# if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
# define BOOST_FUSION_HAS_VARIADIC_DEQUE
# endif
///////////////////////////////////////////////////////////////////////////////

View File

@ -0,0 +1,74 @@
/*=============================================================================
Copyright (c) 2005-2013 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_BUILD_DEQUE_02032013_1921)
#define BOOST_FUSION_BUILD_DEQUE_02032013_1921
#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 <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/end.hpp>
#include <boost/fusion/container/deque/front_extended_deque.hpp>
namespace boost { namespace fusion { namespace detail
{
template <typename First, typename Last
, bool is_empty = result_of::equal_to<First, Last>::value>
struct build_deque;
template <typename First, typename Last>
struct build_deque<First, Last, true>
{
typedef deque<> type;
static type
call(First const&, Last const&)
{
return type();
}
};
template <typename T, typename Rest>
struct push_front_deque;
template <typename T, typename ...Rest>
struct push_front_deque<T, deque<Rest...>>
{
typedef deque<T, Rest...> type;
static type
call(T const& first, deque<Rest...> const& rest)
{
return type(front_extended_deque<deque<Rest...>, T>(rest, first));
}
};
template <typename First, typename Last>
struct build_deque<First, Last, false>
{
typedef
build_deque<typename result_of::next<First>::type, Last>
next_build_deque;
typedef push_front_deque<
typename result_of::value_of<First>::type
, typename next_build_deque::type>
push_front;
typedef typename push_front::type type;
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_deque::call(fusion::next(f), l));
}
};
}}}
#endif

View File

@ -8,7 +8,7 @@
#if !defined(FUSION_CONVERT_IMPL_20061213_2207)
#define FUSION_CONVERT_IMPL_20061213_2207
#include <boost/fusion/container/deque/detail/as_deque.hpp>
#include <boost/fusion/container/deque/convert.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
@ -17,6 +17,12 @@ namespace boost { namespace fusion
{
struct deque_tag;
namespace result_of
{
template <typename Sequence>
struct as_deque;
}
namespace extension
{
template <typename T>
@ -28,14 +34,11 @@ namespace boost { namespace fusion
template <typename Sequence>
struct apply
{
typedef detail::as_deque<result_of::size<Sequence>::value> gen;
typedef typename gen::
template apply<typename result_of::begin<Sequence>::type>::type
type;
typedef result_of::as_deque<Sequence> gen;
typedef typename gen::type type;
static type call(Sequence& seq)
{
return gen::call(fusion::begin(seq));
return gen::call(seq);
}
};
};

View File

@ -45,7 +45,7 @@ namespace boost { namespace fusion { namespace detail
}}}
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/deque/detail/preprocessed/as_deque.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/as_deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
@ -78,7 +78,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename fusion::result_of::value_of<BOOST_PP_CAT(I, n)>::type \
BOOST_PP_CAT(T, n);
#define BOOST_PP_FILENAME_1 <boost/fusion/container/deque/detail/as_deque.hpp>
#define BOOST_PP_FILENAME_1 <boost/fusion/container/deque/detail/cpp03/as_deque.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
#include BOOST_PP_ITERATE()

View File

@ -0,0 +1,52 @@
/*=============================================================================
Copyright (c) 2005-2013 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(BOOST_FUSION_BUILD_DEQUE_02032013_1921)
#define BOOST_FUSION_BUILD_DEQUE_02032013_1921
#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
#error "C++03 only! This file should not have been included"
#endif
#include <boost/fusion/sequence/intrinsic/begin.hpp>
#include <boost/fusion/sequence/intrinsic/size.hpp>
#include <boost/fusion/container/deque/detail/cpp03/as_deque.hpp>
#include <boost/fusion/container/deque/front_extended_deque.hpp>
namespace boost { namespace fusion
{
namespace result_of
{
template <typename Sequence>
struct as_deque
{
typedef typename
detail::as_deque<result_of::size<Sequence>::value>
gen;
typedef typename gen::
template apply<typename result_of::begin<Sequence>::type>::type
type;
};
}
template <typename Sequence>
inline typename result_of::as_deque<Sequence>::type
as_deque(Sequence& seq)
{
typedef typename result_of::as_deque<Sequence>::gen gen;
return gen::call(fusion::begin(seq));
}
template <typename Sequence>
inline typename result_of::as_deque<Sequence const>::type
as_deque(Sequence const& seq)
{
typedef typename result_of::as_deque<Sequence const>::gen gen;
return gen::call(fusion::begin(seq));
}
}}
#endif

View File

@ -5,18 +5,18 @@
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_CPP03_FUSION_DEQUE_26112006_1649)
#define BOOST_CPP03_FUSION_DEQUE_26112006_1649
#if !defined(BOOST_PP_FUSION_DEQUE_26112006_1649)
#define BOOST_PP_FUSION_DEQUE_26112006_1649
#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
#error "C++03 only! This file should not have been included"
#endif
#include <boost/fusion/container/deque/limits.hpp>
#include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
#include <boost/fusion/container/deque/front_extended_deque.hpp>
#include <boost/fusion/container/deque/back_extended_deque.hpp>
#include <boost/fusion/container/deque/detail/cpp03_deque_keyed_values.hpp>
#include <boost/fusion/container/deque/detail/deque_initial_size.hpp>
#include <boost/fusion/container/deque/detail/cpp03/deque_keyed_values.hpp>
#include <boost/fusion/container/deque/detail/cpp03/deque_initial_size.hpp>
#include <boost/fusion/support/sequence_base.hpp>
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
@ -40,10 +40,10 @@
#include <boost/utility/enable_if.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/deque/detail/preprocessed/deque.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
#endif
/*=============================================================================
@ -78,7 +78,7 @@ namespace boost { namespace fusion {
mpl::if_<mpl::equal_to<size, mpl::int_<0> >, mpl::int_<0>, mpl::int_<-1> >::type::value> next_down;
typedef mpl::false_ is_view;
#include <boost/fusion/container/deque/detail/deque_forward_ctor.hpp>
#include <boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp>
deque()
{}
@ -87,13 +87,37 @@ namespace boost { namespace fusion {
: base(t0, detail::nil_keyed_element())
{}
explicit deque(deque const& rhs)
: base(rhs)
{}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename T0_>
explicit deque(T0_&& t0
, typename enable_if<is_convertible<T0_, T0> >::type* /*dummy*/ = 0
)
: base(std::forward<T0_>(t0), detail::nil_keyed_element())
{}
explicit deque(deque&& rhs)
: base(std::forward<deque>(rhs))
{}
#endif
template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& seq)
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)> const& seq)
: base(seq)
{}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, typename U)>
deque(deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>&& seq)
: base(std::forward<deque<BOOST_PP_ENUM_PARAMS(FUSION_MAX_DEQUE_SIZE, U)>>(seq))
{}
#endif
template<typename Sequence>
deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0)
deque(Sequence const& seq, typename disable_if<is_convertible<Sequence, T0> >::type* /*dummy*/ = 0)
: base(base::from_iterator(fusion::begin(seq)))
{}
@ -113,7 +137,39 @@ namespace boost { namespace fusion {
return *this;
}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename T>
deque&
operator=(T&& rhs)
{
base::operator=(std::forward<T>(rhs));
return *this;
}
#endif
};
template <>
struct deque<> : detail::nil_keyed_element
{
typedef deque_tag fusion_tag;
typedef bidirectional_traversal_tag category;
typedef mpl::int_<0> size;
typedef mpl::int_<0> next_up;
typedef mpl::int_<0> next_down;
typedef mpl::false_ is_view;
template <typename Sequence>
deque(Sequence const&,
typename enable_if<
mpl::and_<
traits::is_sequence<Sequence>
, result_of::empty<Sequence> > >::type* /*dummy*/ = 0)
{}
deque() {}
};
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)

View File

@ -9,27 +9,44 @@
#if !defined(BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_FORWARD_CTOR_04122006_2212)
#define BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_FORWARD_CTOR_04122006_2212
#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
#error "C++03 only! This file should not have been included"
#endif
#define FUSION_DEQUE_FORWARD_CTOR_FORWARD(z, n, _) std::forward<T_##n>(t##n)
#include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#define BOOST_PP_FILENAME_1 \
<boost/fusion/container/deque/detail/deque_forward_ctor.hpp>
<boost/fusion/container/deque/detail/cpp03/deque_forward_ctor.hpp>
#define BOOST_PP_ITERATION_LIMITS (2, FUSION_MAX_DEQUE_SIZE)
#include BOOST_PP_ITERATE()
#undef FUSION_DEQUE_FORWARD_CTOR_FORWARD
#endif
#else
#define N BOOST_PP_ITERATION()
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
deque(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<typename add_const<T, >::type>::type t))
: base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::call(BOOST_PP_ENUM_PARAMS(N, t)))
: base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::construct(BOOST_PP_ENUM_PARAMS(N, t)))
{}
#else
deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& t))
: base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::construct(BOOST_PP_ENUM_PARAMS(N, t)))
{}
template <BOOST_PP_ENUM_PARAMS(N, typename T_)>
deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T_, && t))
: base(detail::deque_keyed_values<BOOST_PP_ENUM_PARAMS(N, T)>::
forward_(BOOST_PP_ENUM(N, FUSION_DEQUE_FORWARD_CTOR_FORWARD, _)))
{}
#endif
#undef N
#endif

View File

@ -5,21 +5,21 @@
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#if !defined(FUSION_CPP03_DEQUE_FORWARD_02092007_0749)
#define FUSION_CPP03_DEQUE_FORWARD_02092007_0749
#if !defined(FUSION_PP_DEQUE_FORWARD_02092007_0749)
#define FUSION_PP_DEQUE_FORWARD_02092007_0749
#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
#error "C++03 only! This file should not have been included"
#endif
#include <boost/fusion/container/deque/limits.hpp>
#include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/deque/detail/preprocessed/deque_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_fwd.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR "_fwd.hpp")
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque" FUSION_MAX_DEQUE_SIZE_STR "_fwd.hpp")
#endif
/*=============================================================================

View File

@ -8,7 +8,7 @@
#if !defined(BOOST_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139)
#define BOOST_FUSION_DEQUE_DETAIL_DEQUE_INITIAL_SIZE_26112006_2139
#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
#error "C++03 only! This file should not have been included"
#endif
@ -25,7 +25,7 @@ namespace boost { namespace fusion
}}
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_initial_size" FUSION_MAX_DEQUE_SIZE_STR ".hpp")

View File

@ -8,11 +8,11 @@
#if !defined(BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330)
#define BOOST_FUSION_DEQUE_DETAIL_DEQUE_KEYED_VALUES_26112006_1330
#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
#error "C++03 only! This file should not have been included"
#endif
#include <boost/fusion/container/deque/limits.hpp>
#include <boost/fusion/container/deque/detail/cpp03/limits.hpp>
#include <boost/fusion/container/deque/detail/keyed_element.hpp>
#include <boost/preprocessor/iterate.hpp>
@ -34,7 +34,7 @@ namespace boost { namespace fusion
}}
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "preprocessed/deque_keyed_values" FUSION_MAX_DEQUE_SIZE_STR ".hpp")
@ -68,7 +68,12 @@ namespace boost { namespace fusion { namespace detail
{
typedef nil_keyed_element type;
static type call()
static type construct()
{
return type();
}
static type forward_()
{
return type();
}
@ -84,7 +89,7 @@ namespace boost { namespace fusion { namespace detail
BOOST_PP_ENUM_SHIFTED_PARAMS(FUSION_MAX_DEQUE_SIZE, T)>::type tail;
typedef keyed_element<N, T0, tail> type;
#include <boost/fusion/container/deque/detail/deque_keyed_values_call.hpp>
#include <boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp>
};

View File

@ -9,25 +9,30 @@
#if !defined(BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_KEYED_VALUES_CALL_04122006_2211)
#define BOOST_FUSION_SEQUENCE_DEQUE_DETAIL_DEQUE_KEYED_VALUES_CALL_04122006_2211
#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
#error "C++03 only! This file should not have been included"
#endif
#include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
#include <boost/preprocessor/repetition/enum_shifted.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#define FUSION_DEQUE_KEYED_VALUES_FORWARD(z, n, _) \
std::forward<BOOST_PP_CAT(T_, n)>(BOOST_PP_CAT(t, n))
#define BOOST_PP_FILENAME_1 \
<boost/fusion/container/deque/detail/deque_keyed_values_call.hpp>
<boost/fusion/container/deque/detail/cpp03/deque_keyed_values_call.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
#include BOOST_PP_ITERATE()
#undef FUSION_DEQUE_KEYED_VALUES_FORWARD
#endif
#else
#define N BOOST_PP_ITERATION()
static type call(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<typename add_const<T, >::type>::type t))
static type construct(BOOST_PP_ENUM_BINARY_PARAMS(N, typename add_reference<typename add_const<T, >::type>::type t))
{
return type(t0,
deque_keyed_values_impl<
@ -35,8 +40,22 @@
#if N > 1
, BOOST_PP_ENUM_SHIFTED_PARAMS(N, T)
#endif
>::call(BOOST_PP_ENUM_SHIFTED_PARAMS(N, t)));
>::construct(BOOST_PP_ENUM_SHIFTED_PARAMS(N, t)));
}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <BOOST_PP_ENUM_PARAMS(N, typename T_)>
static type forward_(BOOST_PP_ENUM_BINARY_PARAMS(N, T_, && t))
{
return type(std::forward<T_0>(t0),
deque_keyed_values_impl<
next_index
#if N > 1
, BOOST_PP_ENUM_SHIFTED_PARAMS(N, T_)
#endif
>::forward_(BOOST_PP_ENUM_SHIFTED(N, FUSION_DEQUE_KEYED_VALUES_FORWARD, _)));
}
#endif
#undef N
#endif

View File

@ -8,7 +8,7 @@
#if !defined(BOOST_FUSION_DEQUE_LIMITS_26112006_1737)
#define BOOST_FUSION_DEQUE_LIMITS_26112006_1737
#if defined(BOOST_FUSION_HAS_CPP11_DEQUE)
#if defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
#error "C++03 only! This file should not have been included"
#endif

View File

@ -8,15 +8,15 @@
==============================================================================*/
#if FUSION_MAX_DEQUE_SIZE <= 10
#include <boost/fusion/container/deque/detail/preprocessed/as_deque10.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque10.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 20
#include <boost/fusion/container/deque/detail/preprocessed/as_deque20.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque20.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 30
#include <boost/fusion/container/deque/detail/preprocessed/as_deque30.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque30.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 40
#include <boost/fusion/container/deque/detail/preprocessed/as_deque40.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque40.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 50
#include <boost/fusion/container/deque/detail/preprocessed/as_deque50.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/as_deque50.hpp>
#else
#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
#endif

View File

@ -8,15 +8,15 @@
==============================================================================*/
#if FUSION_MAX_DEQUE_SIZE <= 10
#include <boost/fusion/container/deque/detail/preprocessed/deque10.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque10.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 20
#include <boost/fusion/container/deque/detail/preprocessed/deque20.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque20.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 30
#include <boost/fusion/container/deque/detail/preprocessed/deque30.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque30.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 40
#include <boost/fusion/container/deque/detail/preprocessed/deque40.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque40.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 50
#include <boost/fusion/container/deque/detail/preprocessed/deque50.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque50.hpp>
#else
#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
#endif

View File

@ -8,15 +8,15 @@
==============================================================================*/
#if FUSION_MAX_DEQUE_SIZE <= 10
#include <boost/fusion/container/deque/detail/preprocessed/deque10_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque10_fwd.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 20
#include <boost/fusion/container/deque/detail/preprocessed/deque20_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque20_fwd.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 30
#include <boost/fusion/container/deque/detail/preprocessed/deque30_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque30_fwd.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 40
#include <boost/fusion/container/deque/detail/preprocessed/deque40_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque40_fwd.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 50
#include <boost/fusion/container/deque/detail/preprocessed/deque50_fwd.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque50_fwd.hpp>
#else
#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
#endif

View File

@ -8,15 +8,15 @@
==============================================================================*/
#if FUSION_MAX_DEQUE_SIZE <= 10
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size10.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size10.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 20
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size20.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size20.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 30
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size30.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size30.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 40
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size40.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size40.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 50
#include <boost/fusion/container/deque/detail/preprocessed/deque_initial_size50.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_initial_size50.hpp>
#else
#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
#endif

View File

@ -8,15 +8,15 @@
==============================================================================*/
#if FUSION_MAX_DEQUE_SIZE <= 10
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values10.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values10.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 20
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values20.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values20.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 30
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values30.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values30.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 40
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values40.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values40.hpp>
#elif FUSION_MAX_DEQUE_SIZE <= 50
#include <boost/fusion/container/deque/detail/preprocessed/deque_keyed_values50.hpp>
#include <boost/fusion/container/deque/detail/cpp03/preprocessed/deque_keyed_values50.hpp>
#else
#error "FUSION_MAX_DEQUE_SIZE out of bounds for preprocessed headers"
#endif

View File

@ -28,13 +28,23 @@ namespace boost { namespace fusion { namespace detail
typedef typename deque_keyed_values_impl<next_index, Tail...>::type tail;
typedef keyed_element<N, Head, tail> type;
static type call(
static type construct(
typename detail::call_param<Head>::type head
, typename detail::call_param<Tail>::type... tail)
{
return type(
head
, deque_keyed_values_impl<next_index, Tail...>::call(tail...)
, deque_keyed_values_impl<next_index, Tail...>::construct(tail...)
);
}
template <typename Head_, typename ...Tail_>
static type forward_(Head_&& head, Tail_&&... tail)
{
return type(
std::forward<Head_>(head)
, deque_keyed_values_impl<next_index, Tail_...>::
forward_(std::forward<Tail_>(tail)...)
);
}
};
@ -45,7 +55,8 @@ namespace boost { namespace fusion { namespace detail
struct deque_keyed_values_impl<N>
{
typedef nil_keyed_element type;
static type call() { return type(); }
static type construct() { return type(); }
static type forward_() { return type(); }
};
template <typename ...Elements>

View File

@ -47,16 +47,42 @@ namespace boost { namespace fusion { namespace detail
*it, base::from_iterator(fusion::next(it)));
}
keyed_element(keyed_element const& rhs)
: Rest(rhs.get_base()), value_(rhs.value_)
{}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
keyed_element(keyed_element&& rhs)
: Rest(std::forward<Rest>(rhs.forward_base()))
, value_(std::forward<Value>(rhs.value_))
{}
#endif
template <typename U, typename Rst>
keyed_element(keyed_element<Key, U, Rst> const& rhs)
: Rest(rhs.get_base()), value_(rhs.value_)
{}
Rest const get_base() const
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
#endif
Rest& get_base()
{
return *this;
}
Rest const& get_base() const
{
return *this;
}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
Rest&& forward_base()
{
return std::forward<Rest>(*static_cast<Rest*>(this));
}
#endif
typename cref_result<Value>::type get(Key) const
{
return value_;
@ -67,10 +93,19 @@ namespace boost { namespace fusion { namespace detail
return value_;
}
keyed_element(typename call_param<Value>::type value, Rest const& rest)
keyed_element(
typename detail::call_param<Value>::type value
, Rest const& rest)
: Rest(rest), value_(value)
{}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
keyed_element(Value&& value, Rest&& rest)
: Rest(std::forward<Rest>(rest))
, value_(std::forward<Value>(value))
{}
#endif
keyed_element()
: Rest(), value_()
{}
@ -90,6 +125,15 @@ namespace boost { namespace fusion { namespace detail
return *this;
}
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
keyed_element& operator=(keyed_element&& rhs)
{
base::operator=(std::forward<keyed_element>(rhs));
value_ = std::forward<Value>(rhs.value_);
return *this;
}
#endif
Value value_;
};

View File

@ -30,7 +30,7 @@ namespace boost { namespace fusion
: base(val, deque)
{}
#if defined(BOOST_NO_RVALUE_REFERENCES)
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
template <typename Arg>
front_extended_deque(Deque const& deque, Arg& val)
: base(val, deque)

View File

@ -11,11 +11,11 @@
namespace boost { namespace fusion
{
struct nil;
struct nil_;
namespace result_of
{
template <typename Car, typename Cdr = nil>
template <typename Car, typename Cdr = nil_>
struct cons_tie
{
typedef cons<Car&, Cdr> type;

View File

@ -1,41 +1,23 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2006 Dan Marsden
Copyright (c) 2001-2013 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_PP_IS_ITERATING
#if !defined(FUSION_DEQUE_TIE_07192005_1242)
#define FUSION_DEQUE_TIE_07192005_1242
#if !defined(FUSION_DEQUE_TIE_01272013_1401)
#define FUSION_DEQUE_TIE_01272013_1401
#include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/generation/detail/preprocessed/deque_tie.hpp>
#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
# include <boost/fusion/container/generation/detail/pp_deque_tie.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque_tie" FUSION_MAX_DEQUE_SIZE_STR".hpp")
#endif
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
///////////////////////////////////////////////////////////////////////////////
// C++11 variadic interface
///////////////////////////////////////////////////////////////////////////////
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
This is an auto-generated file. Do not edit!
==============================================================================*/
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 1)
#endif
#include <boost/fusion/support/detail/as_fusion_element.hpp>
namespace boost { namespace fusion
{
@ -43,63 +25,21 @@ namespace boost { namespace fusion
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_DEQUE_SIZE, typename T, void_)
, typename Extra = void_
>
struct deque_tie;
}
#define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)&
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/deque_tie.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
#include BOOST_PP_ITERATE()
#undef BOOST_FUSION_REF
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(output: null)
#endif
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
#endif
#else // defined(BOOST_PP_IS_ITERATING)
///////////////////////////////////////////////////////////////////////////////
//
// Preprocessor vertical repetition code
//
///////////////////////////////////////////////////////////////////////////////
#define N BOOST_PP_ITERATION()
namespace result_of
{
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct deque_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
#undef TEXT
#else
struct deque_tie<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
template <typename ...T>
struct deque_tie
{
typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
typedef deque<T&...> type;
};
}
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
inline deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
deque_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _))
template <typename ...T>
inline deque<T&...>
deque_tie(T&... arg)
{
return deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>(
BOOST_PP_ENUM_PARAMS(N, _));
return deque<T&...>(arg...);
}
}}
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)
#endif
#endif

View File

@ -0,0 +1,105 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2006 Dan Marsden
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_PP_IS_ITERATING
#if !defined(FUSION_PP_DEQUE_TIE_07192005_1242)
#define FUSION_PP_DEQUE_TIE_07192005_1242
#include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/generation/detail/preprocessed/deque_tie.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/deque_tie" FUSION_MAX_DEQUE_SIZE_STR".hpp")
#endif
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
This is an auto-generated file. Do not edit!
==============================================================================*/
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 1)
#endif
namespace boost { namespace fusion
{
struct void_;
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_DEQUE_SIZE, typename T, void_)
, typename Extra = void_
>
struct deque_tie;
}
#define BOOST_FUSION_REF(z, n, data) BOOST_PP_CAT(T, n)&
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_deque_tie.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
#include BOOST_PP_ITERATE()
#undef BOOST_FUSION_REF
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(output: null)
#endif
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
#endif
#else // defined(BOOST_PP_IS_ITERATING)
///////////////////////////////////////////////////////////////////////////////
//
// Preprocessor vertical repetition code
//
///////////////////////////////////////////////////////////////////////////////
#define N BOOST_PP_ITERATION()
namespace result_of
{
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct deque_tie< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
#undef TEXT
#else
struct deque_tie<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
{
typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)> type;
};
}
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
inline deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>
deque_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, T, & _))
{
return deque<BOOST_PP_ENUM(N, BOOST_FUSION_REF, _)>(
BOOST_PP_ENUM_PARAMS(N, _));
}
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)

View File

@ -0,0 +1,121 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2006 Dan Marsden
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_PP_IS_ITERATING
#if !defined(FUSION_PP_MAKE_DEQUE_07162005_0243)
#define FUSION_MAKE_PP_DEQUE_07162005_0243
#include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/generation/detail/preprocessed/make_deque.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_deque" FUSION_MAX_DEQUE_SIZE_STR".hpp")
#endif
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
This is an auto-generated file. Do not edit!
==============================================================================*/
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 1)
#endif
namespace boost { namespace fusion
{
struct void_;
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_DEQUE_SIZE, typename T, void_)
, typename Extra = void_
>
struct make_deque;
template <>
struct make_deque<>
{
typedef deque<> type;
};
}
inline deque<>
make_deque()
{
return deque<>();
}
#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \
typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \
typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_make_deque.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
#include BOOST_PP_ITERATE()
#undef BOOST_FUSION_AS_FUSION_ELEMENT
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(output: null)
#endif
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
#endif
#else // defined(BOOST_PP_IS_ITERATING)
///////////////////////////////////////////////////////////////////////////////
//
// Preprocessor vertical repetition code
//
///////////////////////////////////////////////////////////////////////////////
#define N BOOST_PP_ITERATION()
namespace result_of
{
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct make_deque< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
#undef TEXT
#else
struct make_deque<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
{
typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
};
}
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
inline deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
make_deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
{
return deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
BOOST_PP_ENUM_PARAMS(N, _));
}
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)

View File

@ -0,0 +1,132 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_PP_IS_ITERATING
#if !defined(FUSION_PP_MAKE_MAP_07222005_1247)
#define FUSION_PP_MAKE_MAP_07222005_1247
#include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/map/map.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/support/pair.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/generation/detail/preprocessed/make_map.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_map" FUSION_MAX_MAP_SIZE_STR".hpp")
#endif
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
This is an auto-generated file. Do not edit!
==============================================================================*/
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 1)
#endif
namespace boost { namespace fusion
{
struct void_;
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_VECTOR_SIZE, typename K, void_)
, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_VECTOR_SIZE, typename D, void_)
, typename Extra = void_
>
struct make_map;
template <>
struct make_map<>
{
typedef map<> type;
};
}
inline map<>
make_map()
{
return map<>();
}
#define BOOST_FUSION_PAIR(z, n, data) \
fusion::pair< \
BOOST_PP_CAT(K, n) \
, typename detail::as_fusion_element<BOOST_PP_CAT(D, n)>::type>
#define BOOST_FUSION_MAKE_PAIR(z, n, data) \
fusion::make_pair<BOOST_PP_CAT(K, n)>(BOOST_PP_CAT(_, n)) \
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_make_map.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
#include BOOST_PP_ITERATE()
#undef BOOST_FUSION_PAIR
#undef BOOST_FUSION_MAKE_PAIR
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(output: null)
#endif
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
#endif
#else // defined(BOOST_PP_IS_ITERATING)
///////////////////////////////////////////////////////////////////////////////
//
// Preprocessor vertical repetition code
//
///////////////////////////////////////////////////////////////////////////////
#define N BOOST_PP_ITERATION()
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS(N, typename K)
, BOOST_PP_ENUM_PARAMS(N, typename D)
>
#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_VECTOR_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_)>
#undef TEXT
#else
struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)>
#endif
{
typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)> type;
};
}
template <
BOOST_PP_ENUM_PARAMS(N, typename K)
, BOOST_PP_ENUM_PARAMS(N, typename D)
>
inline map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)>
make_map(BOOST_PP_ENUM_BINARY_PARAMS(N, D, const& _))
{
return map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)>(
BOOST_PP_ENUM(N, BOOST_FUSION_MAKE_PAIR, _));
}
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)

View File

@ -0,0 +1,136 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2006 Dan Marsden
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_PP_IS_ITERATING
#if !defined(FUSION_PP_MAP_TIE_20060814_1116)
#define FUSION_PP_MAP_TIE_20060814_1116
#include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/map/map.hpp>
#include <boost/fusion/container/map/detail/cpp03/limits.hpp>
#include <boost/fusion/support/pair.hpp>
#include <boost/fusion/container/generation/pair_tie.hpp>
#include <boost/type_traits/add_reference.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/generation/detail/preprocessed/map_tie.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/map_tie" FUSION_MAX_MAP_SIZE_STR".hpp")
#endif
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
This is an auto-generated file. Do not edit!
==============================================================================*/
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 1)
#endif
namespace boost { namespace fusion
{
struct void_;
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_MAP_SIZE, typename K, void_)
, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_MAP_SIZE, typename D, void_)
, typename Extra = void_
>
struct map_tie;
template <>
struct map_tie<>
{
typedef map<> type;
};
}
inline map<>
map_tie()
{
return map<>();
}
#define BOOST_FUSION_TIED_PAIR(z, n, data) \
fusion::pair< \
BOOST_PP_CAT(K, n) \
, typename add_reference<BOOST_PP_CAT(D, n)>::type>
#define BOOST_FUSION_PAIR_TIE(z, n, data) \
fusion::pair_tie<BOOST_PP_CAT(K, n)>(BOOST_PP_CAT(_, n)) \
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/detail/pp_map_tie.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
#include BOOST_PP_ITERATE()
#undef BOOST_FUSION_PAIR
#undef BOOST_FUSION_MAKE_PAIR
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(output: null)
#endif
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
#endif
#else // defined(BOOST_PP_IS_ITERATING)
///////////////////////////////////////////////////////////////////////////////
//
// Preprocessor vertical repetition code
//
///////////////////////////////////////////////////////////////////////////////
#define N BOOST_PP_ITERATION()
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS(N, typename K)
, BOOST_PP_ENUM_PARAMS(N, typename D)
>
#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_MAP_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_MAP_SIZE, TEXT, void_)>
#undef TEXT
#else
struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)>
#endif
{
typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)> type;
};
}
template <
BOOST_PP_ENUM_PARAMS(N, typename K)
, BOOST_PP_ENUM_PARAMS(N, typename D)
>
inline map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)>
map_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, D, & _))
{
return map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)>(
BOOST_PP_ENUM(N, BOOST_FUSION_PAIR_TIE, _));
}
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)

View File

@ -13,11 +13,11 @@
namespace boost { namespace fusion
{
struct nil;
struct nil_;
namespace result_of
{
template <typename Car, typename Cdr = nil>
template <typename Car, typename Cdr = nil_>
struct make_cons
{
typedef cons<typename detail::as_fusion_element<Car>::type, Cdr> type;

View File

@ -1,124 +1,43 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2006 Dan Marsden
Copyright (c) 2001-2013 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
#if !defined(FUSION_MAKE_DEQUE_01272013_1401)
#define FUSION_MAKE_DEQUE_01272013_1401
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_PP_IS_ITERATING
#if !defined(FUSION_MAKE_DEQUE_07162005_0243)
#define FUSION_MAKE_DEQUE_07162005_0243
#include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/deque/deque.hpp>
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/generation/detail/preprocessed/make_deque.hpp>
#if !defined(BOOST_FUSION_HAS_VARIADIC_DEQUE)
# include <boost/fusion/container/generation/detail/pp_make_deque.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_deque" FUSION_MAX_DEQUE_SIZE_STR".hpp")
#endif
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
///////////////////////////////////////////////////////////////////////////////
// C++11 variadic interface
///////////////////////////////////////////////////////////////////////////////
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
This is an auto-generated file. Do not edit!
==============================================================================*/
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 1)
#endif
#include <boost/fusion/support/detail/as_fusion_element.hpp>
namespace boost { namespace fusion
{
struct void_;
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_DEQUE_SIZE, typename T, void_)
, typename Extra = void_
>
struct make_deque;
template <>
struct make_deque<>
template <typename ...T>
struct make_deque
{
typedef deque<> type;
typedef deque<T...> type;
};
}
inline deque<>
make_deque()
template <typename ...T>
inline deque<typename detail::as_fusion_element<T>::type...>
make_deque(T const&... arg)
{
return deque<>();
return deque<typename detail::as_fusion_element<T>::type...>(arg...);
}
#define BOOST_FUSION_AS_FUSION_ELEMENT(z, n, data) \
typename detail::as_fusion_element<BOOST_PP_CAT(T, n)>::type
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/make_deque.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_DEQUE_SIZE)
#include BOOST_PP_ITERATE()
#undef BOOST_FUSION_AS_FUSION_ELEMENT
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(output: null)
#endif
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
}}
#endif
#else // defined(BOOST_PP_IS_ITERATING)
///////////////////////////////////////////////////////////////////////////////
//
// Preprocessor vertical repetition code
//
///////////////////////////////////////////////////////////////////////////////
#define N BOOST_PP_ITERATION()
namespace result_of
{
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct make_deque< BOOST_PP_ENUM_PARAMS(N, T) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_DEQUE_SIZE, TEXT, void_) >
#undef TEXT
#else
struct make_deque<BOOST_PP_ENUM_PARAMS(N, T)>
#endif
{
typedef deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)> type;
};
}
template <BOOST_PP_ENUM_PARAMS(N, typename T)>
inline deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>
make_deque(BOOST_PP_ENUM_BINARY_PARAMS(N, T, const& _))
{
return deque<BOOST_PP_ENUM(N, BOOST_FUSION_AS_FUSION_ELEMENT, _)>(
BOOST_PP_ENUM_PARAMS(N, _));
}
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)

View File

@ -1,132 +1,62 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2001-2013 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_PP_IS_ITERATING
#if !defined(FUSION_MAKE_MAP_07222005_1247)
#define FUSION_MAKE_MAP_07222005_1247
#include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/map/map.hpp>
#if !defined(BOOST_FUSION_HAS_VARIADIC_MAP)
# include <boost/fusion/container/generation/detail/pp_make_map.hpp>
#else
///////////////////////////////////////////////////////////////////////////////
// C++11 variadic interface
///////////////////////////////////////////////////////////////////////////////
#include <boost/fusion/support/detail/as_fusion_element.hpp>
#include <boost/fusion/support/pair.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/generation/detail/preprocessed/make_map.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/make_map" FUSION_MAX_MAP_SIZE_STR".hpp")
#endif
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
This is an auto-generated file. Do not edit!
==============================================================================*/
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 1)
#endif
namespace boost { namespace fusion
{
struct void_;
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_VECTOR_SIZE, typename K, void_)
, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_VECTOR_SIZE, typename D, void_)
, typename Extra = void_
>
struct make_map;
template <>
struct make_map<>
template <typename ...Key>
struct make_map
{
typedef map<> type;
template <typename ...T>
struct apply
{
typedef map<
fusion::pair<
Key
, typename detail::as_fusion_element<T>::type
>...>
type;
};
};
}
inline map<>
make_map()
template <typename ...Key, typename ...T>
inline map<
fusion::pair<
Key
, typename detail::as_fusion_element<T>::type
>...>
make_map(T const&... arg)
{
return map<>();
typedef map<
fusion::pair<
Key
, typename detail::as_fusion_element<T>::type
>...>
result_type;
return result_type(arg...);
}
#define BOOST_FUSION_PAIR(z, n, data) \
fusion::pair< \
BOOST_PP_CAT(K, n) \
, typename detail::as_fusion_element<BOOST_PP_CAT(D, n)>::type>
#define BOOST_FUSION_MAKE_PAIR(z, n, data) \
fusion::make_pair<BOOST_PP_CAT(K, n)>(BOOST_PP_CAT(_, n)) \
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/make_map.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_VECTOR_SIZE)
#include BOOST_PP_ITERATE()
#undef BOOST_FUSION_PAIR
#undef BOOST_FUSION_MAKE_PAIR
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(output: null)
#endif
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
}}
#endif
#else // defined(BOOST_PP_IS_ITERATING)
///////////////////////////////////////////////////////////////////////////////
//
// Preprocessor vertical repetition code
//
///////////////////////////////////////////////////////////////////////////////
#define N BOOST_PP_ITERATION()
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS(N, typename K)
, BOOST_PP_ENUM_PARAMS(N, typename D)
>
#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_VECTOR_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_VECTOR_SIZE, TEXT, void_)>
#undef TEXT
#else
struct make_map<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)>
#endif
{
typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)> type;
};
}
template <
BOOST_PP_ENUM_PARAMS(N, typename K)
, BOOST_PP_ENUM_PARAMS(N, typename D)
>
inline map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)>
make_map(BOOST_PP_ENUM_BINARY_PARAMS(N, D, const& _))
{
return map<BOOST_PP_ENUM(N, BOOST_FUSION_PAIR, _)>(
BOOST_PP_ENUM(N, BOOST_FUSION_MAKE_PAIR, _));
}
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)
#endif

View File

@ -1,136 +1,46 @@
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2006 Dan Marsden
Copyright (c) 2001-2013 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#ifndef BOOST_PP_IS_ITERATING
#if !defined(FUSION_MAP_TIE_20060814_1116)
#define FUSION_MAP_TIE_20060814_1116
#if !defined(FUSION_MAP_TIE_07222005_1247)
#define FUSION_MAP_TIE_07222005_1247
#include <boost/preprocessor/iterate.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_binary_params.hpp>
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/fusion/container/map/map.hpp>
#include <boost/fusion/container/map/limits.hpp>
#include <boost/fusion/support/pair.hpp>
#include <boost/fusion/container/generation/pair_tie.hpp>
#include <boost/type_traits/add_reference.hpp>
#if !defined(BOOST_FUSION_DONT_USE_PREPROCESSED_FILES)
#include <boost/fusion/container/generation/detail/preprocessed/map_tie.hpp>
#if !defined(BOOST_FUSION_HAS_VARIADIC_MAP)
# include <boost/fusion/container/generation/detail/pp_map_tie.hpp>
#else
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 2, line: 0, output: "detail/preprocessed/map_tie" FUSION_MAX_MAP_SIZE_STR".hpp")
#endif
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
This is an auto-generated file. Do not edit!
==============================================================================*/
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(preserve: 1)
#endif
///////////////////////////////////////////////////////////////////////////////
// C++11 variadic interface
///////////////////////////////////////////////////////////////////////////////
#include <boost/fusion/support/pair.hpp>
namespace boost { namespace fusion
{
struct void_;
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_MAP_SIZE, typename K, void_)
, BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(
FUSION_MAX_MAP_SIZE, typename D, void_)
, typename Extra = void_
>
struct map_tie;
template <>
struct map_tie<>
template <typename ...Key>
struct map_tie
{
typedef map<> type;
template <typename ...T>
struct apply
{
typedef map<fusion::pair<Key, T&>...> type;
};
};
}
inline map<>
map_tie()
template <typename ...Key, typename ...T>
inline map<fusion::pair<Key, T&>...>
map_tie(T&... arg)
{
return map<>();
typedef map<fusion::pair<Key, T&>...> result_type;
return result_type(arg...);
}
#define BOOST_FUSION_TIED_PAIR(z, n, data) \
fusion::pair< \
BOOST_PP_CAT(K, n) \
, typename add_reference<BOOST_PP_CAT(D, n)>::type>
#define BOOST_FUSION_PAIR_TIE(z, n, data) \
fusion::pair_tie<BOOST_PP_CAT(K, n)>(BOOST_PP_CAT(_, n)) \
#define BOOST_PP_FILENAME_1 <boost/fusion/container/generation/map_tie.hpp>
#define BOOST_PP_ITERATION_LIMITS (1, FUSION_MAX_MAP_SIZE)
#include BOOST_PP_ITERATE()
#undef BOOST_FUSION_PAIR
#undef BOOST_FUSION_MAKE_PAIR
}}
#if defined(__WAVE__) && defined(BOOST_FUSION_CREATE_PREPROCESSED_FILES)
#pragma wave option(output: null)
#endif
#endif // BOOST_FUSION_DONT_USE_PREPROCESSED_FILES
}}
#endif
#else // defined(BOOST_PP_IS_ITERATING)
///////////////////////////////////////////////////////////////////////////////
//
// Preprocessor vertical repetition code
//
///////////////////////////////////////////////////////////////////////////////
#define N BOOST_PP_ITERATION()
namespace result_of
{
template <
BOOST_PP_ENUM_PARAMS(N, typename K)
, BOOST_PP_ENUM_PARAMS(N, typename D)
>
#if defined(BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS)
#define TEXT(z, n, text) , text
struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D) BOOST_PP_REPEAT_FROM_TO(N, FUSION_MAX_MAP_SIZE, TEXT, void_) BOOST_PP_REPEAT_FROM_TO(BOOST_PP_DEC(N), FUSION_MAX_MAP_SIZE, TEXT, void_)>
#undef TEXT
#else
struct map_tie<BOOST_PP_ENUM_PARAMS(N, K), BOOST_PP_ENUM_PARAMS(N, D)>
#endif
{
typedef map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)> type;
};
}
template <
BOOST_PP_ENUM_PARAMS(N, typename K)
, BOOST_PP_ENUM_PARAMS(N, typename D)
>
inline map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)>
map_tie(BOOST_PP_ENUM_BINARY_PARAMS(N, D, & _))
{
return map<BOOST_PP_ENUM(N, BOOST_FUSION_TIED_PAIR, _)>(
BOOST_PP_ENUM(N, BOOST_FUSION_PAIR_TIE, _));
}
#undef N
#endif // defined(BOOST_PP_IS_ITERATING)
#endif

View File

@ -34,7 +34,7 @@ namespace boost { namespace fusion
struct forward_traversal_tag;
struct fusion_sequence_tag;
struct nil : sequence_base<nil>
struct nil_ : sequence_base<nil_>
{
typedef mpl::int_<0> size;
typedef cons_tag fusion_tag;
@ -44,10 +44,10 @@ namespace boost { namespace fusion
typedef void_ car_type;
typedef void_ cdr_type;
nil() {}
nil_() {}
template <typename Iterator>
nil(Iterator const& /*iter*/, mpl::true_ /*this_is_an_iterator*/)
nil_(Iterator const& /*iter*/, mpl::true_ /*this_is_an_iterator*/)
{}
template <typename Iterator>
@ -56,7 +56,7 @@ namespace boost { namespace fusion
}
};
template <typename Car, typename Cdr /*= nil*/>
template <typename Car, typename Cdr /*= nil_*/>
struct cons : sequence_base<cons<Car, Cdr> >
{
typedef mpl::int_<Cdr::size::value+1> size;

View File

@ -2,7 +2,7 @@
Copyright (c) 2001-2011 Joel de Guzman
Copyright (c) 2005 Eric Niebler
Distributed under the Boost Software License, Version 1.0. (See accompanying
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_CONS_FWD_HPP_INCLUDED)
@ -10,9 +10,12 @@
namespace boost { namespace fusion
{
struct nil;
struct nil_;
#ifndef nil
typedef nil_ nil;
#endif
template <typename Car, typename Cdr = nil>
template <typename Car, typename Cdr = nil_>
struct cons;
}}

View File

@ -18,14 +18,14 @@
namespace boost { namespace fusion
{
struct nil;
struct nil_;
struct cons_iterator_tag;
struct forward_traversal_tag;
template <typename Cons>
struct cons_iterator_identity;
template <typename Cons = nil>
template <typename Cons = nil_>
struct cons_iterator : iterator_base<cons_iterator<Cons> >
{
typedef cons_iterator_tag fusion_tag;
@ -49,40 +49,40 @@ namespace boost { namespace fusion
{
typedef forward_traversal_tag category;
typedef cons_iterator_tag fusion_tag;
typedef nil cons_type;
typedef nil_ cons_type;
typedef cons_iterator_identity<
add_const<nil>::type>
add_const<nil_>::type>
identity;
nil_iterator() {}
explicit nil_iterator(nil const&) {}
explicit nil_iterator(nil_ const&) {}
};
template <>
struct cons_iterator<nil> : nil_iterator
struct cons_iterator<nil_> : nil_iterator
{
cons_iterator() {}
explicit cons_iterator(nil const&) {}
explicit cons_iterator(nil_ const&) {}
};
template <>
struct cons_iterator<nil const> : nil_iterator
struct cons_iterator<nil_ const> : nil_iterator
{
cons_iterator() {}
explicit cons_iterator(nil const&) {}
explicit cons_iterator(nil_ const&) {}
};
template <>
struct cons_iterator<list<> > : nil_iterator
{
cons_iterator() {}
explicit cons_iterator(nil const&) {}
explicit cons_iterator(nil_ const&) {}
};
template <>
struct cons_iterator<list<> const> : nil_iterator
{
cons_iterator() {}
explicit cons_iterator(nil const&) {}
explicit cons_iterator(nil_ const&) {}
};
}}

View File

@ -13,7 +13,7 @@
namespace boost { namespace fusion
{
struct nil;
struct nil_;
struct cons_tag;

View File

@ -24,12 +24,12 @@ namespace boost { namespace fusion { namespace detail
template <typename First, typename Last>
struct build_cons<First, Last, true>
{
typedef nil type;
typedef nil_ type;
static nil
static nil_
call(First const&, Last const&)
{
return nil();
return nil_();
}
};

View File

@ -13,7 +13,7 @@ namespace boost { namespace fusion
{
struct cons_tag;
struct nil;
struct nil_;
template <typename Car, typename Cdr>
struct cons;
@ -28,7 +28,7 @@ namespace boost { namespace fusion
{
template <typename Sequence>
struct apply
: boost::is_convertible<Sequence, nil>
: boost::is_convertible<Sequence, nil_>
{};
};
}

View File

@ -13,7 +13,7 @@
namespace boost { namespace fusion
{
struct nil;
struct nil_;
struct cons_tag;
@ -35,7 +35,7 @@ namespace boost { namespace fusion
struct apply
{
typedef cons_iterator<
typename mpl::if_<is_const<Sequence>, nil const, nil>::type>
typename mpl::if_<is_const<Sequence>, nil_ const, nil_>::type>
type;
static type

View File

@ -18,7 +18,7 @@
namespace boost { namespace fusion
{
struct nil;
struct nil_;
struct void_;
}}
@ -61,7 +61,7 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<BOOST_PP_ENUM(FUSION_MAX_LIST_SIZE, FUSION_VOID, _)>
{
typedef nil type;
typedef nil_ type;
};
}}}

View File

@ -8,7 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion
{
struct nil;
struct nil_;
struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9>
struct list

View File

@ -8,7 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion
{
struct nil;
struct nil_;
struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19>
struct list

View File

@ -8,7 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion
{
struct nil;
struct nil_;
struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29>
struct list

View File

@ -8,7 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion
{
struct nil;
struct nil_;
struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39>
struct list

View File

@ -8,7 +8,7 @@
==============================================================================*/
namespace boost { namespace fusion
{
struct nil;
struct nil_;
struct void_;
template <typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9 , typename T10 , typename T11 , typename T12 , typename T13 , typename T14 , typename T15 , typename T16 , typename T17 , typename T18 , typename T19 , typename T20 , typename T21 , typename T22 , typename T23 , typename T24 , typename T25 , typename T26 , typename T27 , typename T28 , typename T29 , typename T30 , typename T31 , typename T32 , typename T33 , typename T34 , typename T35 , typename T36 , typename T37 , typename T38 , typename T39 , typename T40 , typename T41 , typename T42 , typename T43 , typename T44 , typename T45 , typename T46 , typename T47 , typename T48 , typename T49>
struct list

View File

@ -81,6 +81,6 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef nil type;
typedef nil_ type;
};
}}}

View File

@ -141,6 +141,6 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef nil type;
typedef nil_ type;
};
}}}

View File

@ -201,6 +201,6 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef nil type;
typedef nil_ type;
};
}}}

View File

@ -261,6 +261,6 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef nil type;
typedef nil_ type;
};
}}}

View File

@ -321,6 +321,6 @@ namespace boost { namespace fusion { namespace detail
template <>
struct list_to_cons<void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_ , void_>
{
typedef nil type;
typedef nil_ type;
};
}}}

View File

@ -12,7 +12,7 @@
namespace boost { namespace fusion { namespace detail
{
////////////////////////////////////////////////////////////////////////////
template<typename Cons, typename State = nil>
template<typename Cons, typename State = nil_>
struct reverse_cons;
template<typename Car, typename Cdr, typename State>
@ -29,11 +29,11 @@ namespace boost { namespace fusion { namespace detail
};
template<typename State>
struct reverse_cons<nil, State>
struct reverse_cons<nil_, State>
{
typedef State type;
static State const &call(nil const &, State const &state = State())
static State const &call(nil_ const &, State const &state = State())
{
return state;
}

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