summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2010-08-08 18:41:53 (GMT)
committerRemko Tronçon <git@el-tramo.be>2010-08-08 18:41:53 (GMT)
commit19df82042f44c201e5a2821b4fa35465e33a1c90 (patch)
tree1746bddfa31ce2a6488ef5186036a049a255c9da
parent4a5a0977f661bf5c7c34ee7aa48b35073a682203 (diff)
downloadswift-contrib-19df82042f44c201e5a2821b4fa35465e33a1c90.zip
swift-contrib-19df82042f44c201e5a2821b4fa35465e33a1c90.tar.bz2
Added XEP-0004 data forms parsing & serializing.
-rw-r--r--.project86
-rw-r--r--3rdParty/Boost/src/boost/blank.hpp106
-rw-r--r--3rdParty/Boost/src/boost/blank_fwd.hpp22
-rw-r--r--3rdParty/Boost/src/boost/detail/templated_streams.hpp74
-rw-r--r--3rdParty/Boost/src/boost/mpl/O1_size.hpp40
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/O1_size_impl.hpp87
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/clear_impl.hpp35
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/empty_impl.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/find_if_pred.hpp31
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/fold_impl.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/fold_impl_body.hpp365
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/front_impl.hpp41
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/has_size.hpp23
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/inserter_algorithm.hpp159
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/iter_apply.hpp47
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/iter_fold_if_impl.hpp210
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/iter_fold_impl.hpp42
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/lambda_spec.hpp49
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/push_back_impl.hpp70
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/push_front_impl.hpp71
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl.hpp44
-rw-r--r--3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl_body.hpp412
-rw-r--r--3rdParty/Boost/src/boost/mpl/back_inserter.hpp34
-rw-r--r--3rdParty/Boost/src/boost/mpl/clear.hpp39
-rw-r--r--3rdParty/Boost/src/boost/mpl/distance.hpp78
-rw-r--r--3rdParty/Boost/src/boost/mpl/empty.hpp39
-rw-r--r--3rdParty/Boost/src/boost/mpl/find_if.hpp50
-rw-r--r--3rdParty/Boost/src/boost/mpl/fold.hpp48
-rw-r--r--3rdParty/Boost/src/boost/mpl/front.hpp39
-rw-r--r--3rdParty/Boost/src/boost/mpl/front_inserter.hpp33
-rw-r--r--3rdParty/Boost/src/boost/mpl/inserter.hpp32
-rw-r--r--3rdParty/Boost/src/boost/mpl/is_sequence.hpp112
-rw-r--r--3rdParty/Boost/src/boost/mpl/iter_fold.hpp49
-rw-r--r--3rdParty/Boost/src/boost/mpl/iter_fold_if.hpp117
-rw-r--r--3rdParty/Boost/src/boost/mpl/iterator_category.hpp35
-rw-r--r--3rdParty/Boost/src/boost/mpl/iterator_range.hpp42
-rw-r--r--3rdParty/Boost/src/boost/mpl/limits/list.hpp21
-rw-r--r--3rdParty/Boost/src/boost/mpl/list.hpp57
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/O1_size.hpp33
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/begin_end.hpp44
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/clear.hpp34
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/empty.hpp34
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/front.hpp33
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/include_preprocessed.hpp35
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/item.hpp55
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/iterator.hpp76
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/numbered.hpp68
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/numbered_c.hpp71
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/pop_front.hpp34
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10.hpp149
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp164
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20.hpp169
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp173
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30.hpp189
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp183
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40.hpp209
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp193
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50.hpp229
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp203
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/push_back.hpp36
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/push_front.hpp39
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/size.hpp33
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/aux_/tag.hpp24
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list0.hpp42
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list0_c.hpp31
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list10.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list10_c.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list20.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list20_c.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list30.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list30_c.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list40.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list40_c.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list50.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/list/list50_c.hpp43
-rw-r--r--3rdParty/Boost/src/boost/mpl/max_element.hpp72
-rw-r--r--3rdParty/Boost/src/boost/mpl/min_max.hpp46
-rw-r--r--3rdParty/Boost/src/boost/mpl/pair.hpp70
-rw-r--r--3rdParty/Boost/src/boost/mpl/pair_view.hpp169
-rw-r--r--3rdParty/Boost/src/boost/mpl/push_back.hpp53
-rw-r--r--3rdParty/Boost/src/boost/mpl/push_front.hpp52
-rw-r--r--3rdParty/Boost/src/boost/mpl/reverse_fold.hpp50
-rw-r--r--3rdParty/Boost/src/boost/mpl/same_as.hpp55
-rw-r--r--3rdParty/Boost/src/boost/mpl/sizeof.hpp36
-rw-r--r--3rdParty/Boost/src/boost/mpl/transform.hpp145
-rw-r--r--3rdParty/Boost/src/boost/variant.hpp27
-rw-r--r--3rdParty/Boost/src/boost/variant/apply_visitor.hpp20
-rw-r--r--3rdParty/Boost/src/boost/variant/bad_visit.hpp41
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/apply_visitor_binary.hpp172
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/apply_visitor_delayed.hpp85
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/apply_visitor_unary.hpp79
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/backup_holder.hpp94
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/bool_trait_def.hpp30
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/bool_trait_undef.hpp21
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/cast_storage.hpp48
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/config.hpp38
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/enable_recursive.hpp162
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/enable_recursive_fwd.hpp116
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/forced_return.hpp104
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/generic_result_type.hpp88
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/has_nothrow_move.hpp106
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/has_trivial_move.hpp100
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/initializer.hpp265
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/make_variant_list.hpp60
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/move.hpp166
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp95
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/substitute.hpp231
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/substitute_fwd.hpp59
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/variant_io.hpp92
-rw-r--r--3rdParty/Boost/src/boost/variant/detail/visitation_impl.hpp286
-rw-r--r--3rdParty/Boost/src/boost/variant/get.hpp202
-rw-r--r--3rdParty/Boost/src/boost/variant/recursive_variant.hpp182
-rw-r--r--3rdParty/Boost/src/boost/variant/recursive_wrapper.hpp123
-rw-r--r--3rdParty/Boost/src/boost/variant/recursive_wrapper_fwd.hpp147
-rw-r--r--3rdParty/Boost/src/boost/variant/static_visitor.hpp97
-rw-r--r--3rdParty/Boost/src/boost/variant/variant.hpp1862
-rw-r--r--3rdParty/Boost/src/boost/variant/variant_fwd.hpp253
-rw-r--r--3rdParty/Boost/src/boost/variant/visitor_ptr.hpp116
-rwxr-xr-x3rdParty/Boost/update.sh1
-rw-r--r--Swiften/Base/String.h2
-rw-r--r--Swiften/Elements/Command.h66
-rw-r--r--Swiften/Elements/Form.h46
-rw-r--r--Swiften/Elements/FormField.h102
-rw-r--r--Swiften/Parser/PayloadParsers/DiscoInfoParser.h5
-rw-r--r--Swiften/Parser/PayloadParsers/FormParser.cpp132
-rw-r--r--Swiften/Parser/PayloadParsers/FormParser.h106
-rw-r--r--Swiften/Parser/PayloadParsers/FormParserFactory.h29
-rw-r--r--Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp2
-rw-r--r--Swiften/Parser/PayloadParsers/UnitTest/FormParserTest.cpp112
-rw-r--r--Swiften/Parser/SConscript1
-rw-r--r--Swiften/SConscript4
-rw-r--r--Swiften/Serializer/PayloadSerializers/CommandSerializer.cpp98
-rw-r--r--Swiften/Serializer/PayloadSerializers/CommandSerializer.h25
-rw-r--r--Swiften/Serializer/PayloadSerializers/FormSerializer.cpp161
-rw-r--r--Swiften/Serializer/PayloadSerializers/FormSerializer.h27
-rw-r--r--Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp4
-rw-r--r--Swiften/Serializer/PayloadSerializers/UnitTest/FormSerializerTest.cpp139
-rw-r--r--Swiften/Serializer/XML/XMLTextNode.h6
138 files changed, 13231 insertions, 90 deletions
diff --git a/.project b/.project
deleted file mode 100644
index 7effb64..0000000
--- a/.project
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>Swift</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.cdt.make.core.makeBuilder</name>
- <triggers>clean,full,incremental,</triggers>
- <arguments>
- <dictionary>
- <key>org.eclipse.cdt.core.errorOutputParser</key>
- <value>org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.VCErrorParser;</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.append_environment</key>
- <value>true</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.build.arguments</key>
- <value></value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.build.command</key>
- <value>scons</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.build.location</key>
- <value></value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.build.target.auto</key>
- <value>all</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.build.target.clean</key>
- <value>-c</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.build.target.inc</key>
- <value>check=1</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.enableAutoBuild</key>
- <value>false</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.enableCleanBuild</key>
- <value>true</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.enableFullBuild</key>
- <value>true</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.enabledIncrementalBuild</key>
- <value>true</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.environment</key>
- <value></value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.stopOnError</key>
- <value>false</value>
- </dictionary>
- <dictionary>
- <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
- <value>false</value>
- </dictionary>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.cdt.make.core.ScannerConfigBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.cdt.core.cnature</nature>
- <nature>org.eclipse.cdt.make.core.makeNature</nature>
- <nature>org.eclipse.cdt.make.core.ScannerConfigNature</nature>
- <nature>org.eclipse.cdt.core.ccnature</nature>
- </natures>
-</projectDescription>
diff --git a/3rdParty/Boost/src/boost/blank.hpp b/3rdParty/Boost/src/boost/blank.hpp
new file mode 100644
index 0000000..d0fe5ab
--- /dev/null
+++ b/3rdParty/Boost/src/boost/blank.hpp
@@ -0,0 +1,106 @@
+//-----------------------------------------------------------------------------
+// boost blank.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// 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_BLANK_HPP
+#define BOOST_BLANK_HPP
+
+#include "boost/blank_fwd.hpp"
+
+#if !defined(BOOST_NO_IOSTREAM)
+#include <iosfwd> // for std::basic_ostream forward declare
+#include "boost/detail/templated_streams.hpp"
+#endif // BOOST_NO_IOSTREAM
+
+#include "boost/mpl/bool.hpp"
+#include "boost/type_traits/is_empty.hpp"
+#include "boost/type_traits/is_pod.hpp"
+#include "boost/type_traits/is_stateless.hpp"
+
+namespace boost {
+
+struct blank
+{
+};
+
+// type traits specializations
+//
+
+template <>
+struct is_pod< blank >
+ : mpl::true_
+{
+};
+
+template <>
+struct is_empty< blank >
+ : mpl::true_
+{
+};
+
+template <>
+struct is_stateless< blank >
+ : mpl::true_
+{
+};
+
+// relational operators
+//
+
+inline bool operator==(const blank&, const blank&)
+{
+ return true;
+}
+
+inline bool operator<=(const blank&, const blank&)
+{
+ return true;
+}
+
+inline bool operator>=(const blank&, const blank&)
+{
+ return true;
+}
+
+inline bool operator!=(const blank&, const blank&)
+{
+ return false;
+}
+
+inline bool operator<(const blank&, const blank&)
+{
+ return false;
+}
+
+inline bool operator>(const blank&, const blank&)
+{
+ return false;
+}
+
+// streaming support
+//
+#if !defined(BOOST_NO_IOSTREAM)
+
+BOOST_TEMPLATED_STREAM_TEMPLATE(E,T)
+inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<(
+ BOOST_TEMPLATED_STREAM(ostream, E,T)& out
+ , const blank&
+ )
+{
+ // (output nothing)
+ return out;
+}
+
+#endif // BOOST_NO_IOSTREAM
+
+} // namespace boost
+
+#endif // BOOST_BLANK_HPP
diff --git a/3rdParty/Boost/src/boost/blank_fwd.hpp b/3rdParty/Boost/src/boost/blank_fwd.hpp
new file mode 100644
index 0000000..8bfe97c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/blank_fwd.hpp
@@ -0,0 +1,22 @@
+//-----------------------------------------------------------------------------
+// boost blank_fwd.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// 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_BLANK_FWD_HPP
+#define BOOST_BLANK_FWD_HPP
+
+namespace boost {
+
+struct blank;
+
+} // namespace boost
+
+#endif // BOOST_BLANK_FWD_HPP
diff --git a/3rdParty/Boost/src/boost/detail/templated_streams.hpp b/3rdParty/Boost/src/boost/detail/templated_streams.hpp
new file mode 100644
index 0000000..1fa6ee3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/detail/templated_streams.hpp
@@ -0,0 +1,74 @@
+//-----------------------------------------------------------------------------
+// boost detail/templated_streams.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// 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_DETAIL_TEMPLATED_STREAMS_HPP
+#define BOOST_DETAIL_TEMPLATED_STREAMS_HPP
+
+#include "boost/config.hpp"
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) BOOST_TEMPLATED_STREAM_* macros
+//
+// Provides workaround platforms without stream class templates.
+//
+
+#if !defined(BOOST_NO_STD_LOCALE)
+
+#define BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) \
+ template < typename E , typename T >
+
+#define BOOST_TEMPLATED_STREAM_TEMPLATE_ALLOC(E,T,A) \
+ template < typename E , typename T , typename A >
+
+#define BOOST_TEMPLATED_STREAM_ARGS(E,T) \
+ typename E , typename T
+
+#define BOOST_TEMPLATED_STREAM_ARGS_ALLOC(E,T,A) \
+ typename E , typename T , typename A
+
+#define BOOST_TEMPLATED_STREAM_COMMA ,
+
+#define BOOST_TEMPLATED_STREAM_ELEM(E) E
+#define BOOST_TEMPLATED_STREAM_TRAITS(T) T
+#define BOOST_TEMPLATED_STREAM_ALLOC(A) A
+
+#define BOOST_TEMPLATED_STREAM(X,E,T) \
+ BOOST_JOIN(std::basic_,X)< E , T >
+
+#define BOOST_TEMPLATED_STREAM_WITH_ALLOC(X,E,T,A) \
+ BOOST_JOIN(std::basic_,X)< E , T , A >
+
+#else // defined(BOOST_NO_STD_LOCALE)
+
+#define BOOST_TEMPLATED_STREAM_TEMPLATE(E,T) /**/
+
+#define BOOST_TEMPLATED_STREAM_TEMPLATE_ALLOC(E,T,A) /**/
+
+#define BOOST_TEMPLATED_STREAM_ARGS(E,T) /**/
+
+#define BOOST_TEMPLATED_STREAM_ARGS_ALLOC(E,T,A) /**/
+
+#define BOOST_TEMPLATED_STREAM_COMMA /**/
+
+#define BOOST_TEMPLATED_STREAM_ELEM(E) char
+#define BOOST_TEMPLATED_STREAM_TRAITS(T) std::char_traits<char>
+#define BOOST_TEMPLATED_STREAM_ALLOC(A) std::allocator<char>
+
+#define BOOST_TEMPLATED_STREAM(X,E,T) \
+ std::X
+
+#define BOOST_TEMPLATED_STREAM_WITH_ALLOC(X,E,T,A) \
+ std::X
+
+#endif // BOOST_NO_STD_LOCALE
+
+#endif // BOOST_DETAIL_TEMPLATED_STREAMS_HPP
diff --git a/3rdParty/Boost/src/boost/mpl/O1_size.hpp b/3rdParty/Boost/src/boost/mpl/O1_size.hpp
new file mode 100644
index 0000000..84ba521
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/O1_size.hpp
@@ -0,0 +1,40 @@
+
+#ifndef BOOST_MPL_O1_SIZE_HPP_INCLUDED
+#define BOOST_MPL_O1_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/O1_size_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/O1_size_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+// returns sequence size if it's an O(1) operation; otherwise returns -1
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct O1_size
+ : O1_size_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, O1_size, (Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, O1_size)
+
+}}
+
+#endif // BOOST_MPL_O1_SIZE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/O1_size_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/O1_size_impl.hpp
new file mode 100644
index 0000000..df408f0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/O1_size_impl.hpp
@@ -0,0 +1,87 @@
+
+#ifndef BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED
+#define BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: O1_size_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/O1_size_fwd.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/has_size.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation - returns 'Sequence::size' if sequence has a 'size'
+// member, and -1 otherwise; conrete sequences might override it by
+// specializing either the 'O1_size_impl' or the primary 'O1_size' template
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, < 1300) \
+ && !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
+
+namespace aux {
+template< typename Sequence > struct O1_size_impl
+ : Sequence::size
+{
+};
+}
+
+template< typename Tag >
+struct O1_size_impl
+{
+ template< typename Sequence > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : if_<
+ aux::has_size<Sequence>
+ , aux::O1_size_impl<Sequence>
+ , long_<-1>
+ >::type
+ {
+#else
+ {
+ typedef typename if_<
+ aux::has_size<Sequence>
+ , aux::O1_size_impl<Sequence>
+ , long_<-1>
+ >::type type;
+
+ BOOST_STATIC_CONSTANT(long, value =
+ (if_<
+ aux::has_size<Sequence>
+ , aux::O1_size_impl<Sequence>
+ , long_<-1>
+ >::type::value)
+ );
+#endif
+ };
+};
+
+# else // BOOST_MSVC
+
+template< typename Tag >
+struct O1_size_impl
+{
+ template< typename Sequence > struct apply
+ : long_<-1>
+ {
+ };
+};
+
+# endif
+
+}}
+
+#endif // BOOST_MPL_O1_SIZE_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/clear_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/clear_impl.hpp
new file mode 100644
index 0000000..84da54b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/clear_impl.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: clear_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+
+namespace boost { namespace mpl {
+
+// no default implementation; the definition is needed to make MSVC happy
+
+template< typename Tag >
+struct clear_impl
+{
+ template< typename Sequence > struct apply;
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, clear_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_CLEAR_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/empty_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/empty_impl.hpp
new file mode 100644
index 0000000..9a553a7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/empty_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: empty_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation; conrete sequences might override it by
+// specializing either the 'empty_impl' or the primary 'empty' template
+
+template< typename Tag >
+struct empty_impl
+{
+ template< typename Sequence > struct apply
+ : is_same<
+ typename begin<Sequence>::type
+ , typename end<Sequence>::type
+ >
+ {
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1,empty_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_EMPTY_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/find_if_pred.hpp b/3rdParty/Boost/src/boost/mpl/aux_/find_if_pred.hpp
new file mode 100644
index 0000000..c07d89d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/find_if_pred.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED
+#define BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright Eric Friedman 2002
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+#include <boost/mpl/aux_/iter_apply.hpp>
+#include <boost/mpl/not.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename Predicate >
+struct find_if_pred
+{
+ template< typename Iterator >
+ struct apply
+ {
+ typedef not_< aux::iter_apply1<Predicate,Iterator> > type;
+ };
+};
+
+}}}
+
+#endif // BOOST_MPL_AUX_FIND_IF_PRED_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/fold_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/fold_impl.hpp
new file mode 100644
index 0000000..89e42f8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/fold_impl.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/next_prior.hpp>
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/deref.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include <boost/mpl/if.hpp>
+# include <boost/type_traits/is_same.hpp>
+# endif
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER fold_impl.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type
+# define AUX778076_FOLD_IMPL_NAME_PREFIX fold
+# include <boost/mpl/aux_/fold_impl_body.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_FOLD_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/fold_impl_body.hpp b/3rdParty/Boost/src/boost/mpl/aux_/fold_impl_body.hpp
new file mode 100644
index 0000000..41f80b4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/fold_impl_body.hpp
@@ -0,0 +1,365 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: fold_impl_body.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+# include <boost/mpl/limits/unrolling.hpp>
+# include <boost/mpl/aux_/preprocessor/repeat.hpp>
+# include <boost/mpl/aux_/config/workaround.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+# include <boost/mpl/aux_/config/eti.hpp>
+
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/dec.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+// local macros, #undef-ined at the end of the header
+
+# define AUX778076_ITER_FOLD_STEP(unused, i, unused2) \
+ typedef typename apply2< \
+ ForwardOp \
+ , BOOST_PP_CAT(state,i) \
+ , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,i)) \
+ >::type BOOST_PP_CAT(state,BOOST_PP_INC(i)); \
+ typedef typename mpl::next<BOOST_PP_CAT(iter,i)>::type \
+ BOOST_PP_CAT(iter,BOOST_PP_INC(i)); \
+ /**/
+
+# define AUX778076_FOLD_IMPL_NAME \
+ BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_impl) \
+ /**/
+
+# define AUX778076_FOLD_CHUNK_NAME \
+ BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_chunk) \
+ /**/
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+template<
+ BOOST_MPL_AUX_NTTP_DECL(int, N)
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME;
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+# if !BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/fold_impl_body.hpp>))
+# include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template<
+ BOOST_MPL_AUX_NTTP_DECL(int, N)
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME
+{
+ typedef AUX778076_FOLD_IMPL_NAME<
+ BOOST_MPL_LIMIT_UNROLLING
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef AUX778076_FOLD_IMPL_NAME<
+ ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+};
+
+// fallback implementation for sequences of unknown size
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME<-1,First,Last,State,ForwardOp>
+ : AUX778076_FOLD_IMPL_NAME<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
+ , ForwardOp
+ >
+{
+};
+
+template<
+ typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME<-1,Last,Last,State,ForwardOp>
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+# else // BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+// Borland have some serious problems with the unrolled version, so
+// we always use a basic implementation
+template<
+ BOOST_MPL_AUX_NTTP_DECL(int, N)
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME
+{
+ typedef AUX778076_FOLD_IMPL_NAME<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ typedef state type;
+};
+
+template<
+ BOOST_MPL_AUX_NTTP_DECL(int, N)
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME<N,Last,Last,State,ForwardOp >
+{
+ typedef State state;
+ typedef Last iterator;
+ typedef state type;
+};
+
+# endif // BOOST_WORKAROUND(__BORLANDC__, < 0x600)
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
+struct AUX778076_FOLD_CHUNK_NAME;
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/fold_impl_body.hpp>))
+# include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template< BOOST_MPL_AUX_NTTP_DECL(int, N) >
+struct AUX778076_FOLD_CHUNK_NAME
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef AUX778076_FOLD_IMPL_NAME<
+ BOOST_MPL_LIMIT_UNROLLING
+ , First
+ , Last
+ , State
+ , ForwardOp
+ > chunk_;
+
+ typedef AUX778076_FOLD_IMPL_NAME<
+ ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )
+ , typename chunk_::iterator
+ , Last
+ , typename chunk_::state
+ , ForwardOp
+ > res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+};
+
+// fallback implementation for sequences of unknown size
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step);
+
+template<
+ typename Last
+ , typename State
+ >
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct AUX778076_FOLD_CHUNK_NAME<-1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same<First,Last>::type
+ , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)<Last,State>
+ , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)<First,Last,State,ForwardOp>
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+ /// ETI workaround
+ template<> struct result_<int,int,int,int>
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+#endif
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)
+{
+ // can't inherit here - it breaks MSVC 7.0
+ typedef AUX778076_FOLD_CHUNK_NAME<-1>::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
+ , ForwardOp
+ > chunk_;
+
+ typedef typename chunk_::state state;
+ typedef typename chunk_::iterator iterator;
+};
+
+template<
+ BOOST_MPL_AUX_NTTP_DECL(int, N)
+ , typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME
+ : AUX778076_FOLD_CHUNK_NAME<N>
+ ::template result_<First,Last,State,ForwardOp>
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}}
+
+# undef AUX778076_FOLD_IMPL_NAME
+# undef AUX778076_FOLD_CHUNK_NAME
+# undef AUX778076_ITER_FOLD_STEP
+
+#undef AUX778076_FOLD_IMPL_OP
+#undef AUX778076_FOLD_IMPL_NAME_PREFIX
+
+///// iteration
+
+#else
+
+# define n_ BOOST_PP_FRAME_ITERATION(1)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME<n_,First,Last,State,ForwardOp>
+{
+ typedef First iter0;
+ typedef State state0;
+
+ BOOST_MPL_PP_REPEAT(n_, AUX778076_ITER_FOLD_STEP, unused)
+
+ typedef BOOST_PP_CAT(state,n_) state;
+ typedef BOOST_PP_CAT(iter,n_) iterator;
+};
+
+#else
+
+template<> struct AUX778076_FOLD_CHUNK_NAME<n_>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State state0;
+
+ BOOST_MPL_PP_REPEAT(n_, AUX778076_ITER_FOLD_STEP, unused)
+
+ typedef BOOST_PP_CAT(state,n_) state;
+ typedef BOOST_PP_CAT(iter,n_) iterator;
+ };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+ /// ETI workaround
+ template<> struct result_<int,int,int,int>
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+#endif
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+# undef n_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/front_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/front_impl.hpp
new file mode 100644
index 0000000..9bfa643
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/front_impl.hpp
@@ -0,0 +1,41 @@
+
+#ifndef BOOST_MPL_AUX_FRONT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_FRONT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: front_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/front_fwd.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+
+namespace boost { namespace mpl {
+
+// default implementation; conrete sequences might override it by
+// specializing either the 'front_impl' or the primary 'front' template
+
+template< typename Tag >
+struct front_impl
+{
+ template< typename Sequence > struct apply
+ {
+ typedef typename begin<Sequence>::type iter_;
+ typedef typename deref<iter_>::type type;
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1,front_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_FRONT_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/has_size.hpp b/3rdParty/Boost/src/boost/mpl/aux_/has_size.hpp
new file mode 100644
index 0000000..3f72c44
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/has_size.hpp
@@ -0,0 +1,23 @@
+
+#ifndef BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED
+#define BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: has_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/has_xxx.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+BOOST_MPL_HAS_XXX_TRAIT_DEF(size)
+}}}
+
+#endif // BOOST_MPL_AUX_HAS_SIZE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/inserter_algorithm.hpp b/3rdParty/Boost/src/boost/mpl/aux_/inserter_algorithm.hpp
new file mode 100644
index 0000000..a6f340c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/inserter_algorithm.hpp
@@ -0,0 +1,159 @@
+
+#ifndef BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED
+#define BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: inserter_algorithm.hpp 55648 2009-08-18 05:16:53Z agurtovoy $
+// $Date: 2009-08-18 01:16:53 -0400 (Tue, 18 Aug 2009) $
+// $Revision: 55648 $
+
+#include <boost/mpl/back_inserter.hpp>
+#include <boost/mpl/front_inserter.hpp>
+#include <boost/mpl/push_back.hpp>
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/back_inserter.hpp>
+#include <boost/mpl/front_inserter.hpp>
+#include <boost/mpl/clear.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/common_name_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/preprocessor/default_params.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+#include <boost/preprocessor/arithmetic/dec.hpp>
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+# define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \
+BOOST_MPL_AUX_COMMON_NAME_WKND(name) \
+template< \
+ BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
+ > \
+struct name \
+ : aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
+{ \
+}; \
+\
+template< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
+ > \
+struct name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \
+ : if_< has_push_back< typename clear<P1>::type> \
+ , aux::name##_impl< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+ , back_inserter< typename clear<P1>::type > \
+ > \
+ , aux::reverse_##name##_impl< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+ , front_inserter< typename clear<P1>::type > \
+ > \
+ >::type \
+{ \
+}; \
+\
+template< \
+ BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
+ > \
+struct reverse_##name \
+ : aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
+{ \
+}; \
+\
+template< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
+ > \
+struct reverse_##name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \
+ : if_< has_push_back<P1> \
+ , aux::reverse_##name##_impl< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+ , back_inserter< typename clear<P1>::type > \
+ > \
+ , aux::name##_impl< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+ , front_inserter< typename clear<P1>::type > \
+ > \
+ >::type \
+{ \
+}; \
+BOOST_MPL_AUX_NA_SPEC(arity, name) \
+BOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \
+/**/
+
+#else
+
+# define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \
+BOOST_MPL_AUX_COMMON_NAME_WKND(name) \
+template< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
+ > \
+struct def_##name##_impl \
+ : if_< has_push_back<P1> \
+ , aux::name##_impl< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+ , back_inserter< typename clear<P1>::type > \
+ > \
+ , aux::reverse_##name##_impl< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+ , front_inserter< typename clear<P1>::type > \
+ > \
+ >::type \
+{ \
+}; \
+\
+template< \
+ BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
+ > \
+struct name \
+{ \
+ typedef typename eval_if< \
+ is_na<BOOST_PP_CAT(P, arity)> \
+ , def_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \
+ , aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
+ >::type type; \
+}; \
+\
+template< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
+ > \
+struct def_reverse_##name##_impl \
+ : if_< has_push_back<P1> \
+ , aux::reverse_##name##_impl< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+ , back_inserter< typename clear<P1>::type > \
+ > \
+ , aux::name##_impl< \
+ BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
+ , front_inserter< typename clear<P1>::type > \
+ > \
+ >::type \
+{ \
+}; \
+template< \
+ BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
+ > \
+struct reverse_##name \
+{ \
+ typedef typename eval_if< \
+ is_na<BOOST_PP_CAT(P, arity)> \
+ , def_reverse_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \
+ , aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
+ >::type type; \
+}; \
+BOOST_MPL_AUX_NA_SPEC(arity, name) \
+BOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \
+/**/
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+#endif // BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/iter_apply.hpp b/3rdParty/Boost/src/boost/mpl/aux_/iter_apply.hpp
new file mode 100644
index 0000000..fc21f73
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/iter_apply.hpp
@@ -0,0 +1,47 @@
+
+#ifndef BOOST_MPL_ITER_APPLY_HPP_INCLUDED
+#define BOOST_MPL_ITER_APPLY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: iter_apply.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/deref.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template<
+ typename F
+ , typename Iterator
+ >
+struct iter_apply1
+ : apply1< F,typename deref<Iterator>::type >
+{
+};
+
+template<
+ typename F
+ , typename Iterator1
+ , typename Iterator2
+ >
+struct iter_apply2
+ : apply2<
+ F
+ , typename deref<Iterator1>::type
+ , typename deref<Iterator2>::type
+ >
+{
+};
+
+}}}
+
+#endif // BOOST_MPL_ITER_APPLY_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_if_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_if_impl.hpp
new file mode 100644
index 0000000..e7c47ea
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_if_impl.hpp
@@ -0,0 +1,210 @@
+
+#ifndef BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: iter_fold_if_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/identity.hpp>
+# include <boost/mpl/next.hpp>
+# include <boost/mpl/if.hpp>
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/aux_/value_wknd.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER iter_fold_if_impl.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/unrolling.hpp>
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/repeat.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/dec.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+namespace boost { namespace mpl { namespace aux {
+
+template< typename Iterator, typename State >
+struct iter_fold_if_null_step
+{
+ typedef State state;
+ typedef Iterator iterator;
+};
+
+template< bool >
+struct iter_fold_if_step_impl
+{
+ template<
+ typename Iterator
+ , typename State
+ , typename StateOp
+ , typename IteratorOp
+ >
+ struct result_
+ {
+ typedef typename apply2<StateOp,State,Iterator>::type state;
+ typedef typename IteratorOp::type iterator;
+ };
+};
+
+template<>
+struct iter_fold_if_step_impl<false>
+{
+ template<
+ typename Iterator
+ , typename State
+ , typename StateOp
+ , typename IteratorOp
+ >
+ struct result_
+ {
+ typedef State state;
+ typedef Iterator iterator;
+ };
+};
+
+// agurt, 25/jun/02: MSVC 6.5 workaround, had to get rid of inheritance
+// here and in 'iter_fold_if_backward_step', because sometimes it interfered
+// with the "early template instantiation bug" in _really_ ugly ways
+template<
+ typename Iterator
+ , typename State
+ , typename ForwardOp
+ , typename Predicate
+ >
+struct iter_fold_if_forward_step
+{
+ typedef typename apply2<Predicate,State,Iterator>::type not_last;
+ typedef typename iter_fold_if_step_impl<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+ >::template result_< Iterator,State,ForwardOp,mpl::next<Iterator> > impl_;
+
+ typedef typename impl_::state state;
+ typedef typename impl_::iterator iterator;
+};
+
+template<
+ typename Iterator
+ , typename State
+ , typename BackwardOp
+ , typename Predicate
+ >
+struct iter_fold_if_backward_step
+{
+ typedef typename apply2<Predicate,State,Iterator>::type not_last;
+ typedef typename iter_fold_if_step_impl<
+ BOOST_MPL_AUX_MSVC_VALUE_WKND(not_last)::value
+ >::template result_< Iterator,State,BackwardOp,identity<Iterator> > impl_;
+
+ typedef typename impl_::state state;
+ typedef typename impl_::iterator iterator;
+};
+
+
+// local macros, #undef-ined at the end of the header
+
+# define AUX_ITER_FOLD_FORWARD_STEP(unused, i, unused2) \
+ typedef iter_fold_if_forward_step< \
+ typename BOOST_PP_CAT(forward_step,i)::iterator \
+ , typename BOOST_PP_CAT(forward_step,i)::state \
+ , ForwardOp \
+ , ForwardPredicate \
+ > BOOST_PP_CAT(forward_step, BOOST_PP_INC(i)); \
+ /**/
+
+# define AUX_ITER_FOLD_BACKWARD_STEP_FUNC(i) \
+ typedef iter_fold_if_backward_step< \
+ typename BOOST_PP_CAT(forward_step,BOOST_PP_DEC(i))::iterator \
+ , typename BOOST_PP_CAT(backward_step,i)::state \
+ , BackwardOp \
+ , BackwardPredicate \
+ > BOOST_PP_CAT(backward_step,BOOST_PP_DEC(i)); \
+ /**/
+
+# define AUX_ITER_FOLD_BACKWARD_STEP(unused, i, unused2) \
+ AUX_ITER_FOLD_BACKWARD_STEP_FUNC( \
+ BOOST_PP_SUB_D(1,BOOST_MPL_LIMIT_UNROLLING,i) \
+ ) \
+ /**/
+
+# define AUX_LAST_FORWARD_STEP \
+ BOOST_PP_CAT(forward_step, BOOST_MPL_LIMIT_UNROLLING) \
+ /**/
+
+# define AUX_LAST_BACKWARD_STEP \
+ BOOST_PP_CAT(backward_step, BOOST_MPL_LIMIT_UNROLLING) \
+ /**/
+
+template<
+ typename Iterator
+ , typename State
+ , typename ForwardOp
+ , typename ForwardPredicate
+ , typename BackwardOp
+ , typename BackwardPredicate
+ >
+struct iter_fold_if_impl
+{
+ private:
+ typedef iter_fold_if_null_step<Iterator,State> forward_step0;
+ BOOST_PP_REPEAT(
+ BOOST_MPL_LIMIT_UNROLLING
+ , AUX_ITER_FOLD_FORWARD_STEP
+ , unused
+ )
+
+ typedef typename if_<
+ typename AUX_LAST_FORWARD_STEP::not_last
+ , iter_fold_if_impl<
+ typename AUX_LAST_FORWARD_STEP::iterator
+ , typename AUX_LAST_FORWARD_STEP::state
+ , ForwardOp
+ , ForwardPredicate
+ , BackwardOp
+ , BackwardPredicate
+ >
+ , iter_fold_if_null_step<
+ typename AUX_LAST_FORWARD_STEP::iterator
+ , typename AUX_LAST_FORWARD_STEP::state
+ >
+ >::type AUX_LAST_BACKWARD_STEP;
+
+ BOOST_PP_REPEAT(
+ BOOST_MPL_LIMIT_UNROLLING
+ , AUX_ITER_FOLD_BACKWARD_STEP
+ , unused
+ )
+
+ public:
+ typedef typename backward_step0::state state;
+ typedef typename AUX_LAST_BACKWARD_STEP::iterator iterator;
+};
+
+# undef AUX_LAST_BACKWARD_STEP
+# undef AUX_LAST_FORWARD_STEP
+# undef AUX_ITER_FOLD_BACKWARD_STEP
+# undef AUX_ITER_FOLD_BACKWARD_STEP_FUNC
+# undef AUX_ITER_FOLD_FORWARD_STEP
+
+}}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_ITER_FOLD_IF_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_impl.hpp
new file mode 100644
index 0000000..0ea86c3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/iter_fold_impl.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: iter_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/next_prior.hpp>
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include <boost/mpl/if.hpp>
+# include <boost/type_traits/is_same.hpp>
+# endif
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER iter_fold_impl.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# define AUX778076_FOLD_IMPL_OP(iter) iter
+# define AUX778076_FOLD_IMPL_NAME_PREFIX iter_fold
+# include <boost/mpl/aux_/fold_impl_body.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_ITER_FOLD_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/lambda_spec.hpp b/3rdParty/Boost/src/boost/mpl/aux_/lambda_spec.hpp
new file mode 100644
index 0000000..f167479
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/lambda_spec.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED
+#define BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2007
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: lambda_spec.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/lambda_fwd.hpp>
+#include <boost/mpl/int_fwd.hpp>
+#include <boost/mpl/aux_/preprocessor/params.hpp>
+#include <boost/mpl/aux_/lambda_arity_param.hpp>
+#include <boost/mpl/aux_/config/lambda.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_FULL_LAMBDA_SUPPORT)
+
+# define BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(i, name) \
+template< \
+ BOOST_MPL_PP_PARAMS(i, typename T) \
+ , typename Tag \
+ > \
+struct lambda< \
+ name< BOOST_MPL_PP_PARAMS(i, T) > \
+ , Tag \
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(int_<i>) \
+ > \
+{ \
+ typedef false_ is_le; \
+ typedef name< BOOST_MPL_PP_PARAMS(i, T) > result_; \
+ typedef result_ type; \
+}; \
+/**/
+
+#else
+
+# define BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(i, name) /**/
+
+#endif
+
+#endif // BOOST_MPL_AUX_LAMBDA_SPEC_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/push_back_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/push_back_impl.hpp
new file mode 100644
index 0000000..2f839cb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/push_back_impl.hpp
@@ -0,0 +1,70 @@
+
+#ifndef BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: push_back_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $
+// $Date: 2009-08-20 03:50:16 -0400 (Thu, 20 Aug 2009) $
+// $Revision: 55679 $
+
+#include <boost/mpl/push_back_fwd.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+struct has_push_back_arg {};
+
+// agurt 05/feb/04: no default implementation; the stub definition is needed
+// to enable the default 'has_push_back' implementation below
+template< typename Tag >
+struct push_back_impl
+{
+ template< typename Sequence, typename T > struct apply
+ {
+ // should be instantiated only in the context of 'has_push_back_impl';
+ // if you've got an assert here, you are requesting a 'push_back'
+ // specialization that doesn't exist.
+ BOOST_MPL_ASSERT_MSG(
+ ( boost::is_same< T, has_push_back_arg >::value )
+ , REQUESTED_PUSH_BACK_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST
+ , ( Sequence )
+ );
+ };
+};
+
+template< typename Tag >
+struct has_push_back_impl
+{
+ template< typename Seq > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : aux::has_type< push_back< Seq, has_push_back_arg > >
+ {
+#else
+ {
+ typedef aux::has_type< push_back< Seq, has_push_back_arg > > type;
+ BOOST_STATIC_CONSTANT(bool, value =
+ (aux::has_type< push_back< Seq, has_push_back_arg > >::value)
+ );
+#endif
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_back_impl)
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_back_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_PUSH_BACK_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/push_front_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/push_front_impl.hpp
new file mode 100644
index 0000000..6723ea3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/push_front_impl.hpp
@@ -0,0 +1,71 @@
+
+#ifndef BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: push_front_impl.hpp 55679 2009-08-20 07:50:16Z agurtovoy $
+// $Date: 2009-08-20 03:50:16 -0400 (Thu, 20 Aug 2009) $
+// $Revision: 55679 $
+
+#include <boost/mpl/push_front_fwd.hpp>
+#include <boost/mpl/assert.hpp>
+#include <boost/mpl/aux_/has_type.hpp>
+#include <boost/mpl/aux_/traits_lambda_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+struct has_push_front_arg {};
+
+// agurt 05/feb/04: no default implementation; the stub definition is needed
+// to enable the default 'has_push_front' implementation below
+
+template< typename Tag >
+struct push_front_impl
+{
+ template< typename Sequence, typename T > struct apply
+ {
+ // should be instantiated only in the context of 'has_push_front_impl';
+ // if you've got an assert here, you are requesting a 'push_front'
+ // specialization that doesn't exist.
+ BOOST_MPL_ASSERT_MSG(
+ ( boost::is_same< T, has_push_front_arg >::value )
+ , REQUESTED_PUSH_FRONT_SPECIALIZATION_FOR_SEQUENCE_DOES_NOT_EXIST
+ , ( Sequence )
+ );
+ };
+};
+
+template< typename Tag >
+struct has_push_front_impl
+{
+ template< typename Seq > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : aux::has_type< push_front< Seq, has_push_front_arg > >
+ {
+#else
+ {
+ typedef aux::has_type< push_front< Seq, has_push_front_arg > > type;
+ BOOST_STATIC_CONSTANT(bool, value =
+ (aux::has_type< push_front< Seq, has_push_front_arg > >::value)
+ );
+#endif
+ };
+};
+
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(2, push_front_impl)
+BOOST_MPL_ALGORITM_TRAITS_LAMBDA_SPEC(1, has_push_front_impl)
+
+}}
+
+#endif // BOOST_MPL_AUX_PUSH_FRONT_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl.hpp b/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl.hpp
new file mode 100644
index 0000000..b8e2308
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED
+#define BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: reverse_fold_impl.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/next_prior.hpp>
+# include <boost/mpl/deref.hpp>
+# include <boost/mpl/apply.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ || defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+# include <boost/mpl/if.hpp>
+# include <boost/type_traits/is_same.hpp>
+# endif
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER reverse_fold_impl.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# define AUX778076_FOLD_IMPL_OP(iter) typename deref<iter>::type
+# define AUX778076_FOLD_IMPL_NAME_PREFIX reverse_fold
+# include <boost/mpl/aux_/reverse_fold_impl_body.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_AUX_REVERSE_FOLD_IMPL_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl_body.hpp b/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl_body.hpp
new file mode 100644
index 0000000..7bd5618
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/aux_/reverse_fold_impl_body.hpp
@@ -0,0 +1,412 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: reverse_fold_impl_body.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+# include <boost/mpl/limits/unrolling.hpp>
+# include <boost/mpl/aux_/preprocessor/repeat.hpp>
+# include <boost/mpl/aux_/config/ctps.hpp>
+# include <boost/mpl/aux_/nttp_decl.hpp>
+
+# include <boost/preprocessor/arithmetic/sub.hpp>
+# include <boost/preprocessor/iterate.hpp>
+# include <boost/preprocessor/dec.hpp>
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+
+// local macros, #undef-ined at the end of the header
+
+# define AUX778076_ITER_FOLD_FORWARD_STEP(unused, n_, unused2) \
+ typedef typename apply2< \
+ ForwardOp \
+ , BOOST_PP_CAT(fwd_state,n_) \
+ , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,n_)) \
+ >::type BOOST_PP_CAT(fwd_state,BOOST_PP_INC(n_)); \
+ typedef typename mpl::next<BOOST_PP_CAT(iter,n_)>::type \
+ BOOST_PP_CAT(iter,BOOST_PP_INC(n_)); \
+ /**/
+
+# define AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC(n_) \
+ typedef typename apply2< \
+ BackwardOp \
+ , BOOST_PP_CAT(bkwd_state,n_) \
+ , AUX778076_FOLD_IMPL_OP(BOOST_PP_CAT(iter,BOOST_PP_DEC(n_))) \
+ >::type BOOST_PP_CAT(bkwd_state,BOOST_PP_DEC(n_)); \
+ /**/
+
+# define AUX778076_ITER_FOLD_BACKWARD_STEP(unused, n_, j) \
+ AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC( \
+ BOOST_PP_SUB_D(1,j,n_) \
+ ) \
+ /**/
+
+# define AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(n_) \
+ typedef typename nested_chunk::state BOOST_PP_CAT(bkwd_state,n_);
+ /**/
+
+# define AUX778076_FOLD_IMPL_NAME \
+ BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_impl) \
+ /**/
+
+# define AUX778076_FOLD_CHUNK_NAME \
+ BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_chunk) \
+ /**/
+
+namespace boost { namespace mpl { namespace aux {
+
+/// forward declaration
+template<
+ BOOST_MPL_AUX_NTTP_DECL(long, N)
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME;
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/reverse_fold_impl_body.hpp>))
+# include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template<
+ BOOST_MPL_AUX_NTTP_DECL(long, N)
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+
+ BOOST_MPL_PP_REPEAT(
+ BOOST_MPL_LIMIT_UNROLLING
+ , AUX778076_ITER_FOLD_FORWARD_STEP
+ , unused
+ )
+
+ typedef AUX778076_FOLD_IMPL_NAME<
+ ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )
+ , BOOST_PP_CAT(iter,BOOST_MPL_LIMIT_UNROLLING)
+ , Last
+ , BOOST_PP_CAT(fwd_state,BOOST_MPL_LIMIT_UNROLLING)
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(BOOST_MPL_LIMIT_UNROLLING)
+
+ BOOST_MPL_PP_REPEAT(
+ BOOST_MPL_LIMIT_UNROLLING
+ , AUX778076_ITER_FOLD_BACKWARD_STEP
+ , BOOST_MPL_LIMIT_UNROLLING
+ )
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+};
+
+// fallback implementation for sequences of unknown size
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME<-1,First,Last,State,BackwardOp,ForwardOp>
+{
+ typedef AUX778076_FOLD_IMPL_NAME<
+ -1
+ , typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , AUX778076_FOLD_IMPL_OP(First)
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME<-1,Last,Last,State,BackwardOp,ForwardOp>
+{
+ typedef State state;
+ typedef Last iterator;
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) >
+struct AUX778076_FOLD_CHUNK_NAME;
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(0, BOOST_MPL_LIMIT_UNROLLING, <boost/mpl/aux_/reverse_fold_impl_body.hpp>))
+# include BOOST_PP_ITERATE()
+
+// implementation for N that exceeds BOOST_MPL_LIMIT_UNROLLING
+template< BOOST_MPL_AUX_NTTP_DECL(long, N) >
+struct AUX778076_FOLD_CHUNK_NAME
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+
+ BOOST_MPL_PP_REPEAT(
+ BOOST_MPL_LIMIT_UNROLLING
+ , AUX778076_ITER_FOLD_FORWARD_STEP
+ , unused
+ )
+
+ typedef AUX778076_FOLD_IMPL_NAME<
+ ( (N - BOOST_MPL_LIMIT_UNROLLING) < 0 ? 0 : N - BOOST_MPL_LIMIT_UNROLLING )
+ , BOOST_PP_CAT(iter,BOOST_MPL_LIMIT_UNROLLING)
+ , Last
+ , BOOST_PP_CAT(fwd_state,BOOST_MPL_LIMIT_UNROLLING)
+ , BackwardOp
+ , ForwardOp
+ > nested_chunk;
+
+ AUX778076_FIRST_BACKWARD_STATE_TYPEDEF(BOOST_MPL_LIMIT_UNROLLING)
+
+ BOOST_MPL_PP_REPEAT(
+ BOOST_MPL_LIMIT_UNROLLING
+ , AUX778076_ITER_FOLD_BACKWARD_STEP
+ , BOOST_MPL_LIMIT_UNROLLING
+ )
+
+ typedef bkwd_state0 state;
+ typedef typename nested_chunk::iterator iterator;
+ };
+};
+
+// fallback implementation for sequences of unknown size
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step);
+
+template<
+ typename Last
+ , typename State
+ >
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)
+{
+ typedef Last iterator;
+ typedef State state;
+};
+
+template<>
+struct AUX778076_FOLD_CHUNK_NAME<-1>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef typename if_<
+ typename is_same<First,Last>::type
+ , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_null_step)<Last,State>
+ , BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)<First,Last,State,BackwardOp,ForwardOp>
+ >::type res_;
+
+ typedef typename res_::state state;
+ typedef typename res_::iterator iterator;
+ };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+ /// ETI workaround
+ template<> struct result_<int,int,int,int,int>
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+#endif
+};
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct BOOST_PP_CAT(AUX778076_FOLD_IMPL_NAME_PREFIX,_step)
+{
+ typedef AUX778076_FOLD_CHUNK_NAME<-1>::template result_<
+ typename mpl::next<First>::type
+ , Last
+ , typename apply2<ForwardOp,State,AUX778076_FOLD_IMPL_OP(First)>::type
+ , BackwardOp
+ , ForwardOp
+ > nested_step;
+
+ typedef typename apply2<
+ BackwardOp
+ , typename nested_step::state
+ , AUX778076_FOLD_IMPL_OP(First)
+ >::type state;
+
+ typedef typename nested_step::iterator iterator;
+};
+
+template<
+ BOOST_MPL_AUX_NTTP_DECL(long, N)
+ , typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME
+ : AUX778076_FOLD_CHUNK_NAME<N>
+ ::template result_<First,Last,State,BackwardOp,ForwardOp>
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+}}}
+
+# undef AUX778076_FIRST_BACKWARD_STATE_TYPEDEF
+# undef AUX778076_ITER_FOLD_BACKWARD_STEP
+# undef AUX778076_ITER_FOLD_BACKWARD_STEP_FUNC
+# undef AUX778076_ITER_FOLD_FORWARD_STEP
+
+#undef AUX778076_FOLD_IMPL_OP
+#undef AUX778076_FOLD_IMPL_NAME_PREFIX
+
+///// iteration
+
+#else
+
+# define n_ BOOST_PP_FRAME_ITERATION(1)
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_MPL_CFG_NO_NONTYPE_TEMPLATE_PARTIAL_SPEC)
+
+template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+struct AUX778076_FOLD_IMPL_NAME<n_,First,Last,State,BackwardOp,ForwardOp>
+{
+ typedef First iter0;
+ typedef State fwd_state0;
+
+ BOOST_MPL_PP_REPEAT(
+ n_
+ , AUX778076_ITER_FOLD_FORWARD_STEP
+ , unused
+ )
+
+ typedef BOOST_PP_CAT(fwd_state,n_) BOOST_PP_CAT(bkwd_state,n_);
+
+ BOOST_MPL_PP_REPEAT(
+ n_
+ , AUX778076_ITER_FOLD_BACKWARD_STEP
+ , n_
+ )
+
+ typedef bkwd_state0 state;
+ typedef BOOST_PP_CAT(iter,n_) iterator;
+};
+
+#else
+
+template<> struct AUX778076_FOLD_CHUNK_NAME<n_>
+{
+ template<
+ typename First
+ , typename Last
+ , typename State
+ , typename BackwardOp
+ , typename ForwardOp
+ >
+ struct result_
+ {
+ typedef First iter0;
+ typedef State fwd_state0;
+
+ BOOST_MPL_PP_REPEAT(
+ n_
+ , AUX778076_ITER_FOLD_FORWARD_STEP
+ , unused
+ )
+
+ typedef BOOST_PP_CAT(fwd_state,n_) BOOST_PP_CAT(bkwd_state,n_);
+
+ BOOST_MPL_PP_REPEAT(
+ n_
+ , AUX778076_ITER_FOLD_BACKWARD_STEP
+ , n_
+ )
+
+ typedef bkwd_state0 state;
+ typedef BOOST_PP_CAT(iter,n_) iterator;
+ };
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+ /// ETI workaround
+ template<> struct result_<int,int,int,int,int>
+ {
+ typedef int state;
+ typedef int iterator;
+ };
+#endif
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+# undef n_
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/3rdParty/Boost/src/boost/mpl/back_inserter.hpp b/3rdParty/Boost/src/boost/mpl/back_inserter.hpp
new file mode 100644
index 0000000..fa4ede8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/back_inserter.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_BACK_INSERTER_HPP_INCLUDED
+#define BOOST_MPL_BACK_INSERTER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: back_inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/push_back.hpp>
+#include <boost/mpl/inserter.hpp>
+
+namespace boost {
+namespace mpl {
+
+template<
+ typename Sequence
+ >
+struct back_inserter
+ : inserter< Sequence,push_back<> >
+{
+};
+
+}}
+
+#endif // BOOST_MPL_BACK_INSERTER_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/clear.hpp b/3rdParty/Boost/src/boost/mpl/clear.hpp
new file mode 100644
index 0000000..c27f4b3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/clear.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_CLEAR_HPP_INCLUDED
+#define BOOST_MPL_CLEAR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/aux_/clear_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct clear
+ : clear_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,clear,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, clear)
+
+}}
+
+#endif // BOOST_MPL_CLEAR_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/distance.hpp b/3rdParty/Boost/src/boost/mpl/distance.hpp
new file mode 100644
index 0000000..9a180ab
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/distance.hpp
@@ -0,0 +1,78 @@
+
+#ifndef BOOST_MPL_DISTANCE_HPP_INCLUDED
+#define BOOST_MPL_DISTANCE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: distance.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/distance_fwd.hpp>
+#include <boost/mpl/iter_fold.hpp>
+#include <boost/mpl/iterator_range.hpp>
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/tag.hpp>
+#include <boost/mpl/apply_wrap.hpp>
+#include <boost/mpl/aux_/msvc_eti_base.hpp>
+#include <boost/mpl/aux_/value_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/static_constant.hpp>
+
+
+namespace boost { namespace mpl {
+
+// default implementation for forward/bidirectional iterators
+template< typename Tag > struct distance_impl
+{
+ template< typename First, typename Last > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : aux::msvc_eti_base< typename iter_fold<
+ iterator_range<First,Last>
+ , mpl::long_<0>
+ , next<>
+ >::type >
+ {
+#else
+ {
+ typedef typename iter_fold<
+ iterator_range<First,Last>
+ , mpl::long_<0>
+ , next<>
+ >::type type;
+
+ BOOST_STATIC_CONSTANT(long, value =
+ (iter_fold<
+ iterator_range<First,Last>
+ , mpl::long_<0>
+ , next<>
+ >::type::value)
+ );
+#endif
+ };
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(First)
+ , typename BOOST_MPL_AUX_NA_PARAM(Last)
+ >
+struct distance
+ : distance_impl< typename tag<First>::type >
+ ::template apply<First, Last>
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2, distance, (First, Last))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, distance)
+
+}}
+
+#endif // BOOST_MPL_DISTANCE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/empty.hpp b/3rdParty/Boost/src/boost/mpl/empty.hpp
new file mode 100644
index 0000000..adb3c76
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/empty.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_EMPTY_HPP_INCLUDED
+#define BOOST_MPL_EMPTY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/empty_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct empty
+ : empty_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,empty,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, empty)
+
+}}
+
+#endif // BOOST_MPL_EMPTY_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/find_if.hpp b/3rdParty/Boost/src/boost/mpl/find_if.hpp
new file mode 100644
index 0000000..b1d41b7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/find_if.hpp
@@ -0,0 +1,50 @@
+
+#ifndef BOOST_MPL_FIND_IF_HPP_INCLUDED
+#define BOOST_MPL_FIND_IF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: find_if.hpp 49274 2008-10-11 07:22:05Z agurtovoy $
+// $Date: 2008-10-11 03:22:05 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49274 $
+
+#include <boost/mpl/aux_/find_if_pred.hpp>
+#include <boost/mpl/arg.hpp>
+#include <boost/mpl/iter_fold_if.hpp>
+#include <boost/mpl/aux_/common_name_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_COMMON_NAME_WKND(find_if)
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(Predicate)
+ >
+struct find_if
+{
+ typedef typename iter_fold_if<
+ Sequence
+ , void
+ , mpl::arg<1> // ignore
+ , protect< aux::find_if_pred<Predicate> >
+ >::type result_;
+
+ typedef typename second<result_>::type type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,find_if,(Sequence,Predicate))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2,find_if)
+
+}}
+
+#endif // BOOST_MPL_FIND_IF_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/fold.hpp b/3rdParty/Boost/src/boost/mpl/fold.hpp
new file mode 100644
index 0000000..9645681
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/fold.hpp
@@ -0,0 +1,48 @@
+
+#ifndef BOOST_MPL_FOLD_HPP_INCLUDED
+#define BOOST_MPL_FOLD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/O1_size.hpp>
+#include <boost/mpl/aux_/fold_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(State)
+ , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)
+ >
+struct fold
+{
+ typedef typename aux::fold_impl<
+ ::boost::mpl::O1_size<Sequence>::value
+ , typename begin<Sequence>::type
+ , typename end<Sequence>::type
+ , State
+ , ForwardOp
+ >::state type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,fold,(Sequence,State,ForwardOp))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, fold)
+
+}}
+
+#endif // BOOST_MPL_FOLD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/front.hpp b/3rdParty/Boost/src/boost/mpl/front.hpp
new file mode 100644
index 0000000..3ad64e4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/front.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_FRONT_HPP_INCLUDED
+#define BOOST_MPL_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/front_fwd.hpp>
+#include <boost/mpl/aux_/front_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct front
+ : front_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,front,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, front)
+
+}}
+
+#endif // BOOST_MPL_FRONT_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/front_inserter.hpp b/3rdParty/Boost/src/boost/mpl/front_inserter.hpp
new file mode 100644
index 0000000..ee754cf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/front_inserter.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED
+#define BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: front_inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/push_front.hpp>
+#include <boost/mpl/inserter.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename Sequence
+ >
+struct front_inserter
+ : inserter< Sequence,push_front<> >
+{
+};
+
+}}
+
+#endif // BOOST_MPL_FRONT_INSERTER_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/inserter.hpp b/3rdParty/Boost/src/boost/mpl/inserter.hpp
new file mode 100644
index 0000000..8e2c676
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/inserter.hpp
@@ -0,0 +1,32 @@
+
+#ifndef BOOST_MPL_INSERTER_HPP_INCLUDED
+#define BOOST_MPL_INSERTER_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: inserter.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl {
+
+template<
+ typename Sequence
+ , typename Operation
+ >
+struct inserter
+{
+ typedef Sequence state;
+ typedef Operation operation;
+};
+
+}}
+
+#endif // BOOST_MPL_INSERTER_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/is_sequence.hpp b/3rdParty/Boost/src/boost/mpl/is_sequence.hpp
new file mode 100644
index 0000000..0c1f67b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/is_sequence.hpp
@@ -0,0 +1,112 @@
+
+#ifndef BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED
+#define BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2002-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: is_sequence.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/sequence_tag_fwd.hpp>
+#include <boost/mpl/identity.hpp>
+#include <boost/mpl/void.hpp>
+#include <boost/mpl/aux_/has_tag.hpp>
+#include <boost/mpl/aux_/has_begin.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include <boost/mpl/aux_/msvc_is_class.hpp>
+#elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)
+# include <boost/type_traits/is_class.hpp>
+#endif
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+namespace aux {
+
+// agurt, 11/jun/03:
+// MSVC 6.5/7.0 fails if 'has_begin' is instantiated on a class type that has a
+// 'begin' member that doesn't name a type; e.g. 'has_begin< std::vector<int> >'
+// would fail; requiring 'T' to have _both_ 'tag' and 'begin' members workarounds
+// the issue for most real-world cases
+template< typename T > struct is_sequence_impl
+ : and_<
+ identity< aux::has_tag<T> >
+ , identity< aux::has_begin<T> >
+ >
+{
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct is_sequence
+ : if_<
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ aux::msvc_is_class<T>
+#else
+ boost::is_class<T>
+#endif
+ , aux::is_sequence_impl<T>
+ , bool_<false>
+ >::type
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))
+};
+
+#elif defined(BOOST_MPL_CFG_NO_HAS_XXX)
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct is_sequence
+ : bool_<false>
+{
+};
+
+#else
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct is_sequence
+ : not_< is_same< typename begin<T>::type, void_ > >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))
+};
+
+#endif // BOOST_MSVC
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+template<> struct is_sequence<int>
+ : bool_<false>
+{
+};
+#endif
+
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, is_sequence)
+
+}}
+
+#endif // BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/iter_fold.hpp b/3rdParty/Boost/src/boost/mpl/iter_fold.hpp
new file mode 100644
index 0000000..cb24707
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/iter_fold.hpp
@@ -0,0 +1,49 @@
+
+#ifndef BOOST_MPL_ITER_FOLD_HPP_INCLUDED
+#define BOOST_MPL_ITER_FOLD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: iter_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/O1_size.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/aux_/iter_fold_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(State)
+ , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)
+ >
+struct iter_fold
+{
+ typedef typename aux::iter_fold_impl<
+ ::boost::mpl::O1_size<Sequence>::value
+ , typename begin<Sequence>::type
+ , typename end<Sequence>::type
+ , State
+ , typename lambda<ForwardOp>::type
+ >::state type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,iter_fold,(Sequence,State,ForwardOp))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, iter_fold)
+
+}}
+
+#endif // BOOST_MPL_ITER_FOLD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/iter_fold_if.hpp b/3rdParty/Boost/src/boost/mpl/iter_fold_if.hpp
new file mode 100644
index 0000000..da80564
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/iter_fold_if.hpp
@@ -0,0 +1,117 @@
+
+#ifndef BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED
+#define BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2003-2004
+// Copyright Eric Friedman 2003
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: iter_fold_if.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/logical.hpp>
+#include <boost/mpl/always.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/aux_/iter_fold_if_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template< typename Predicate, typename LastIterator >
+struct iter_fold_if_pred
+{
+ template< typename State, typename Iterator > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : and_<
+ not_< is_same<Iterator,LastIterator> >
+ , apply1<Predicate,Iterator>
+ >
+ {
+#else
+ {
+ typedef and_<
+ not_< is_same<Iterator,LastIterator> >
+ , apply1<Predicate,Iterator>
+ > type;
+#endif
+ };
+};
+
+} // namespace aux
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(State)
+ , typename BOOST_MPL_AUX_NA_PARAM(ForwardOp)
+ , typename BOOST_MPL_AUX_NA_PARAM(ForwardPredicate)
+ , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp)
+ , typename BOOST_MPL_AUX_NA_PARAM(BackwardPredicate)
+ >
+struct iter_fold_if
+{
+
+ typedef typename begin<Sequence>::type first_;
+ typedef typename end<Sequence>::type last_;
+
+ typedef typename eval_if<
+ is_na<BackwardPredicate>
+ , if_< is_na<BackwardOp>, always<false_>, always<true_> >
+ , identity<BackwardPredicate>
+ >::type backward_pred_;
+
+// cwpro8 doesn't like 'cut-off' type here (use typedef instead)
+#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) && !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+ struct result_ :
+#else
+ typedef
+#endif
+ aux::iter_fold_if_impl<
+ first_
+ , State
+ , ForwardOp
+ , protect< aux::iter_fold_if_pred< ForwardPredicate,last_ > >
+ , BackwardOp
+ , backward_pred_
+ >
+#if !BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003)) && !BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600))
+ { };
+#else
+ result_;
+#endif
+
+public:
+
+ typedef pair<
+ typename result_::state
+ , typename result_::iterator
+ > type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(
+ 6
+ , iter_fold_if
+ , (Sequence,State,ForwardOp,ForwardPredicate,BackwardOp,BackwardPredicate)
+ )
+};
+
+BOOST_MPL_AUX_NA_SPEC(6, iter_fold_if)
+
+}}
+
+#endif // BOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/iterator_category.hpp b/3rdParty/Boost/src/boost/mpl/iterator_category.hpp
new file mode 100644
index 0000000..084c32f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/iterator_category.hpp
@@ -0,0 +1,35 @@
+
+#ifndef BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED
+#define BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: iterator_category.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Iterator)
+ >
+struct iterator_category
+{
+ typedef typename Iterator::category type;
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,iterator_category,(Iterator))
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, iterator_category)
+
+}}
+
+#endif // BOOST_MPL_ITERATOR_CATEGORY_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/iterator_range.hpp b/3rdParty/Boost/src/boost/mpl/iterator_range.hpp
new file mode 100644
index 0000000..d3fd43b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/iterator_range.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED
+#define BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: iterator_range.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+struct iterator_range_tag;
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(First)
+ , typename BOOST_MPL_AUX_NA_PARAM(Last)
+ >
+struct iterator_range
+{
+ typedef iterator_range_tag tag;
+ typedef iterator_range type;
+ typedef First begin;
+ typedef Last end;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,iterator_range,(First,Last))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, iterator_range)
+
+}}
+
+#endif // BOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/limits/list.hpp b/3rdParty/Boost/src/boost/mpl/limits/list.hpp
new file mode 100644
index 0000000..ee9c7aa
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/limits/list.hpp
@@ -0,0 +1,21 @@
+
+#ifndef BOOST_MPL_LIMITS_LIST_HPP_INCLUDED
+#define BOOST_MPL_LIMITS_LIST_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_LIMIT_LIST_SIZE)
+# define BOOST_MPL_LIMIT_LIST_SIZE 20
+#endif
+
+#endif // BOOST_MPL_LIMITS_LIST_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list.hpp b/3rdParty/Boost/src/boost/mpl/list.hpp
new file mode 100644
index 0000000..838b8f4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list.hpp
@@ -0,0 +1,57 @@
+
+#ifndef BOOST_MPL_LIST_HPP_INCLUDED
+#define BOOST_MPL_LIST_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/limits/list.hpp>
+# include <boost/mpl/aux_/na.hpp>
+# include <boost/mpl/aux_/config/preprocessor.hpp>
+
+# include <boost/preprocessor/inc.hpp>
+# include <boost/preprocessor/cat.hpp>
+# include <boost/preprocessor/stringize.hpp>
+
+#if !defined(BOOST_NEEDS_TOKEN_PASTING_OP_FOR_TOKENS_JUXTAPOSING)
+# define AUX778076_LIST_HEADER \
+ BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE).hpp \
+ /**/
+#else
+# define AUX778076_LIST_HEADER \
+ BOOST_PP_CAT(list,BOOST_MPL_LIMIT_LIST_SIZE)##.hpp \
+ /**/
+#endif
+
+# include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_LIST_HEADER)
+# undef AUX778076_LIST_HEADER
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list.hpp
+# include <boost/mpl/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/mpl/limits/list.hpp>
+
+# define AUX778076_SEQUENCE_NAME list
+# define AUX778076_SEQUENCE_LIMIT BOOST_MPL_LIMIT_LIST_SIZE
+# include <boost/mpl/aux_/sequence_wrapper.hpp>
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+#endif // BOOST_MPL_LIST_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/O1_size.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/O1_size.hpp
new file mode 100644
index 0000000..6ef2cf7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/O1_size.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: O1_size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/O1_size_fwd.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct O1_size_impl< aux::list_tag >
+{
+ template< typename List > struct apply
+ : List::size
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_O1_SIZE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/begin_end.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/begin_end.hpp
new file mode 100644
index 0000000..dab60f3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/begin_end.hpp
@@ -0,0 +1,44 @@
+
+#ifndef BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: begin_end.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/begin_end_fwd.hpp>
+#include <boost/mpl/list/aux_/iterator.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+#include <boost/mpl/list/aux_/item.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct begin_impl< aux::list_tag >
+{
+ template< typename List > struct apply
+ {
+ typedef l_iter<typename List::type> type;
+ };
+};
+
+template<>
+struct end_impl< aux::list_tag >
+{
+ template< typename > struct apply
+ {
+ typedef l_iter<l_end> type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_BEGIN_END_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/clear.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/clear.hpp
new file mode 100644
index 0000000..247a4de
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/clear.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: clear.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/clear_fwd.hpp>
+#include <boost/mpl/list/aux_/item.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct clear_impl< aux::list_tag >
+{
+ template< typename List > struct apply
+ {
+ typedef l_end type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_CLEAR_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/empty.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/empty.hpp
new file mode 100644
index 0000000..6ab60cf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/empty.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: empty.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/empty_fwd.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct empty_impl< aux::list_tag >
+{
+ template< typename List > struct apply
+ : not_<typename List::size>
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_EMPTY_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/front.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/front.hpp
new file mode 100644
index 0000000..8defa99
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/front.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/front_fwd.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct front_impl< aux::list_tag >
+{
+ template< typename List > struct apply
+ {
+ typedef typename List::item type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_FRONT_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/include_preprocessed.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/include_preprocessed.hpp
new file mode 100644
index 0000000..431b51f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/include_preprocessed.hpp
@@ -0,0 +1,35 @@
+
+// Copyright Aleksey Gurtovoy 2001-2006
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: include_preprocessed.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
+
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+#include <boost/preprocessor/cat.hpp>
+#include <boost/preprocessor/stringize.hpp>
+
+# define AUX778076_HEADER \
+ aux_/preprocessed/plain/BOOST_MPL_PREPROCESSED_HEADER \
+/**/
+
+#if BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(700))
+# define AUX778076_INCLUDE_STRING BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)
+# include AUX778076_INCLUDE_STRING
+# undef AUX778076_INCLUDE_STRING
+#else
+# include BOOST_PP_STRINGIZE(boost/mpl/list/AUX778076_HEADER)
+#endif
+
+# undef AUX778076_HEADER
+
+#undef BOOST_MPL_PREPROCESSED_HEADER
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/item.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/item.hpp
new file mode 100644
index 0000000..37ddff7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/item.hpp
@@ -0,0 +1,55 @@
+
+#ifndef BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: item.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+#include <boost/mpl/aux_/config/msvc.hpp>
+#include <boost/mpl/aux_/config/workaround.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename Size
+ , typename T
+ , typename Next
+ >
+struct l_item
+{
+// agurt, 17/jul/03: to facilitate the deficient 'is_sequence' implementation
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ typedef int begin;
+#endif
+ typedef aux::list_tag tag;
+ typedef l_item type;
+
+ typedef Size size;
+ typedef T item;
+ typedef Next next;
+};
+
+struct l_end
+{
+#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ typedef int begin;
+#endif
+ typedef aux::list_tag tag;
+ typedef l_end type;
+ typedef long_<0> size;
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_NODE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/iterator.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/iterator.hpp
new file mode 100644
index 0000000..b94126c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/iterator.hpp
@@ -0,0 +1,76 @@
+
+#ifndef BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: iterator.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/list/aux_/item.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/lambda_spec.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+
+namespace boost { namespace mpl {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Node >
+struct l_iter
+{
+ typedef aux::l_iter_tag tag;
+ typedef forward_iterator_tag category;
+};
+
+template< typename Node >
+struct deref< l_iter<Node> >
+{
+ typedef typename Node::item type;
+};
+
+template< typename Node >
+struct next< l_iter<Node> >
+{
+ typedef l_iter< typename Node::next > type;
+};
+
+#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+template< typename Node >
+struct l_iter
+{
+ typedef aux::l_iter_tag tag;
+ typedef forward_iterator_tag category;
+ typedef typename Node::item type;
+ typedef l_iter< typename mpl::next<Node>::type > next;
+};
+
+#endif
+
+
+template<> struct l_iter<l_end>
+{
+ typedef aux::l_iter_tag tag;
+ typedef forward_iterator_tag category;
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef na type;
+ typedef l_iter next;
+#endif
+};
+
+BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, l_iter)
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_ITERATOR_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/numbered.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/numbered.hpp
new file mode 100644
index 0000000..de8d404
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/numbered.hpp
@@ -0,0 +1,68 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Peter Dimov 2000-2002
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: numbered.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if defined(BOOST_PP_IS_ITERATING)
+
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_shifted_params.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i BOOST_PP_FRAME_ITERATION(1)
+
+#if i == 1
+
+template<
+ BOOST_PP_ENUM_PARAMS(i, typename T)
+ >
+struct list1
+ : l_item<
+ long_<1>
+ , T0
+ , l_end
+ >
+{
+ typedef list1 type;
+};
+
+#else
+
+# define MPL_AUX_LIST_TAIL(list, i, T) \
+ BOOST_PP_CAT(list,BOOST_PP_DEC(i))< \
+ BOOST_PP_ENUM_SHIFTED_PARAMS(i, T) \
+ > \
+ /**/
+
+template<
+ BOOST_PP_ENUM_PARAMS(i, typename T)
+ >
+struct BOOST_PP_CAT(list,i)
+ : l_item<
+ long_<i>
+ , T0
+ , MPL_AUX_LIST_TAIL(list,i,T)
+ >
+{
+ typedef BOOST_PP_CAT(list,i) type;
+};
+
+# undef MPL_AUX_LIST_TAIL
+
+#endif // i == 1
+
+#undef i
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/numbered_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/numbered_c.hpp
new file mode 100644
index 0000000..f304382
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/numbered_c.hpp
@@ -0,0 +1,71 @@
+
+// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: numbered_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if defined(BOOST_PP_IS_ITERATING)
+
+#include <boost/preprocessor/enum_params.hpp>
+#include <boost/preprocessor/enum_shifted_params.hpp>
+#include <boost/preprocessor/dec.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+#define i BOOST_PP_FRAME_ITERATION(1)
+
+#if i == 1
+
+template<
+ typename T
+ , BOOST_PP_ENUM_PARAMS(i, T C)
+ >
+struct list1_c
+ : l_item<
+ long_<1>
+ , integral_c<T,C0>
+ , l_end
+ >
+{
+ typedef list1_c type;
+ typedef T value_type;
+};
+
+#else
+
+# define MPL_AUX_LIST_C_TAIL(list, i, C) \
+ BOOST_PP_CAT(BOOST_PP_CAT(list,BOOST_PP_DEC(i)),_c)<T, \
+ BOOST_PP_ENUM_SHIFTED_PARAMS(i, C) \
+ > \
+ /**/
+
+template<
+ typename T
+ , BOOST_PP_ENUM_PARAMS(i, T C)
+ >
+struct BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c)
+ : l_item<
+ long_<i>
+ , integral_c<T,C0>
+ , MPL_AUX_LIST_C_TAIL(list,i,C)
+ >
+{
+ typedef BOOST_PP_CAT(BOOST_PP_CAT(list,i),_c) type;
+ typedef T value_type;
+};
+
+# undef MPL_AUX_LIST_C_TAIL
+
+#endif // i == 1
+
+#undef i
+
+#endif // BOOST_PP_IS_ITERATING
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/pop_front.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/pop_front.hpp
new file mode 100644
index 0000000..e053391
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/pop_front.hpp
@@ -0,0 +1,34 @@
+
+#ifndef BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: pop_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/pop_front_fwd.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct pop_front_impl< aux::list_tag >
+{
+ template< typename List > struct apply
+ {
+ typedef typename mpl::next<List>::type type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_POP_FRONT_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10.hpp
new file mode 100644
index 0000000..99368d2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10.hpp
@@ -0,0 +1,149 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list10.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0
+ >
+struct list1
+ : l_item<
+ long_<1>
+ , T0
+ , l_end
+ >
+{
+ typedef list1 type;
+};
+
+template<
+ typename T0, typename T1
+ >
+struct list2
+ : l_item<
+ long_<2>
+ , T0
+ , list1<T1>
+ >
+{
+ typedef list2 type;
+};
+
+template<
+ typename T0, typename T1, typename T2
+ >
+struct list3
+ : l_item<
+ long_<3>
+ , T0
+ , list2< T1,T2 >
+ >
+{
+ typedef list3 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3
+ >
+struct list4
+ : l_item<
+ long_<4>
+ , T0
+ , list3< T1,T2,T3 >
+ >
+{
+ typedef list4 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ >
+struct list5
+ : l_item<
+ long_<5>
+ , T0
+ , list4< T1,T2,T3,T4 >
+ >
+{
+ typedef list5 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5
+ >
+struct list6
+ : l_item<
+ long_<6>
+ , T0
+ , list5< T1,T2,T3,T4,T5 >
+ >
+{
+ typedef list6 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6
+ >
+struct list7
+ : l_item<
+ long_<7>
+ , T0
+ , list6< T1,T2,T3,T4,T5,T6 >
+ >
+{
+ typedef list7 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7
+ >
+struct list8
+ : l_item<
+ long_<8>
+ , T0
+ , list7< T1,T2,T3,T4,T5,T6,T7 >
+ >
+{
+ typedef list8 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8
+ >
+struct list9
+ : l_item<
+ long_<9>
+ , T0
+ , list8< T1,T2,T3,T4,T5,T6,T7,T8 >
+ >
+{
+ typedef list9 type;
+};
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ >
+struct list10
+ : l_item<
+ long_<10>
+ , T0
+ , list9< T1,T2,T3,T4,T5,T6,T7,T8,T9 >
+ >
+{
+ typedef list10 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp
new file mode 100644
index 0000000..7133d71
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp
@@ -0,0 +1,164 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list10_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T
+ , T C0
+ >
+struct list1_c
+ : l_item<
+ long_<1>
+ , integral_c< T,C0 >
+ , l_end
+ >
+{
+ typedef list1_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1
+ >
+struct list2_c
+ : l_item<
+ long_<2>
+ , integral_c< T,C0 >
+ , list1_c< T,C1 >
+ >
+{
+ typedef list2_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2
+ >
+struct list3_c
+ : l_item<
+ long_<3>
+ , integral_c< T,C0 >
+ , list2_c< T,C1,C2 >
+ >
+{
+ typedef list3_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3
+ >
+struct list4_c
+ : l_item<
+ long_<4>
+ , integral_c< T,C0 >
+ , list3_c< T,C1,C2,C3 >
+ >
+{
+ typedef list4_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4
+ >
+struct list5_c
+ : l_item<
+ long_<5>
+ , integral_c< T,C0 >
+ , list4_c< T,C1,C2,C3,C4 >
+ >
+{
+ typedef list5_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5
+ >
+struct list6_c
+ : l_item<
+ long_<6>
+ , integral_c< T,C0 >
+ , list5_c< T,C1,C2,C3,C4,C5 >
+ >
+{
+ typedef list6_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6
+ >
+struct list7_c
+ : l_item<
+ long_<7>
+ , integral_c< T,C0 >
+ , list6_c< T,C1,C2,C3,C4,C5,C6 >
+ >
+{
+ typedef list7_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7
+ >
+struct list8_c
+ : l_item<
+ long_<8>
+ , integral_c< T,C0 >
+ , list7_c< T,C1,C2,C3,C4,C5,C6,C7 >
+ >
+{
+ typedef list8_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8
+ >
+struct list9_c
+ : l_item<
+ long_<9>
+ , integral_c< T,C0 >
+ , list8_c< T,C1,C2,C3,C4,C5,C6,C7,C8 >
+ >
+{
+ typedef list9_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9
+ >
+struct list10_c
+ : l_item<
+ long_<10>
+ , integral_c< T,C0 >
+ , list9_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9 >
+ >
+{
+ typedef list10_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20.hpp
new file mode 100644
index 0000000..750e495
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20.hpp
@@ -0,0 +1,169 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list20.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T0, typename T1, typename T2, typename T3, typename T4
+ , typename T5, typename T6, typename T7, typename T8, typename T9
+ , typename T10
+ >
+struct list11
+ : l_item<
+ long_<11>
+ , T0
+ , list10< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10 >
+ >
+{
+ typedef list11 type;
+};
+
+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
+ >
+struct list12
+ : l_item<
+ long_<12>
+ , T0
+ , list11< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11 >
+ >
+{
+ typedef list12 type;
+};
+
+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
+ >
+struct list13
+ : l_item<
+ long_<13>
+ , T0
+ , list12< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12 >
+ >
+{
+ typedef list13 type;
+};
+
+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
+ >
+struct list14
+ : l_item<
+ long_<14>
+ , T0
+ , list13< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13 >
+ >
+{
+ typedef list14 type;
+};
+
+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
+ >
+struct list15
+ : l_item<
+ long_<15>
+ , T0
+ , list14< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14 >
+ >
+{
+ typedef list15 type;
+};
+
+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
+ >
+struct list16
+ : l_item<
+ long_<16>
+ , T0
+ , list15< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15 >
+ >
+{
+ typedef list16 type;
+};
+
+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
+ >
+struct list17
+ : l_item<
+ long_<17>
+ , T0
+ , list16< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16 >
+ >
+{
+ typedef list17 type;
+};
+
+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
+ >
+struct list18
+ : l_item<
+ long_<18>
+ , T0
+ , list17< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17 >
+ >
+{
+ typedef list18 type;
+};
+
+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
+ >
+struct list19
+ : l_item<
+ long_<19>
+ , T0
+ , list18< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18 >
+ >
+{
+ typedef list19 type;
+};
+
+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 list20
+ : l_item<
+ long_<20>
+ , T0
+ , list19< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >
+ >
+{
+ typedef list20 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp
new file mode 100644
index 0000000..7f15acf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp
@@ -0,0 +1,173 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list20_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ >
+struct list11_c
+ : l_item<
+ long_<11>
+ , integral_c< T,C0 >
+ , list10_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 >
+ >
+{
+ typedef list11_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11
+ >
+struct list12_c
+ : l_item<
+ long_<12>
+ , integral_c< T,C0 >
+ , list11_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11 >
+ >
+{
+ typedef list12_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12
+ >
+struct list13_c
+ : l_item<
+ long_<13>
+ , integral_c< T,C0 >
+ , list12_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12 >
+ >
+{
+ typedef list13_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13
+ >
+struct list14_c
+ : l_item<
+ long_<14>
+ , integral_c< T,C0 >
+ , list13_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13 >
+ >
+{
+ typedef list14_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14
+ >
+struct list15_c
+ : l_item<
+ long_<15>
+ , integral_c< T,C0 >
+ , list14_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14 >
+ >
+{
+ typedef list15_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15
+ >
+struct list16_c
+ : l_item<
+ long_<16>
+ , integral_c< T,C0 >
+ , list15_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15 >
+ >
+{
+ typedef list16_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16
+ >
+struct list17_c
+ : l_item<
+ long_<17>
+ , integral_c< T,C0 >
+ , list16_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16 >
+ >
+{
+ typedef list17_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17
+ >
+struct list18_c
+ : l_item<
+ long_<18>
+ , integral_c< T,C0 >
+ , list17_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 >
+ >
+{
+ typedef list18_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18
+ >
+struct list19_c
+ : l_item<
+ long_<19>
+ , integral_c< T,C0 >
+ , list18_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18 >
+ >
+{
+ typedef list19_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19
+ >
+struct list20_c
+ : l_item<
+ long_<20>
+ , integral_c< T,C0 >
+ , list19_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19 >
+ >
+{
+ typedef list20_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30.hpp
new file mode 100644
index 0000000..5459101
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30.hpp
@@ -0,0 +1,189 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list30.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+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
+ >
+struct list21
+ : l_item<
+ long_<21>
+ , T0
+ , list20< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20 >
+ >
+{
+ typedef list21 type;
+};
+
+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
+ >
+struct list22
+ : l_item<
+ long_<22>
+ , T0
+ , list21< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21 >
+ >
+{
+ typedef list22 type;
+};
+
+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
+ >
+struct list23
+ : l_item<
+ long_<23>
+ , T0
+ , list22< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22 >
+ >
+{
+ typedef list23 type;
+};
+
+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
+ >
+struct list24
+ : l_item<
+ long_<24>
+ , T0
+ , list23< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23 >
+ >
+{
+ typedef list24 type;
+};
+
+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
+ >
+struct list25
+ : l_item<
+ long_<25>
+ , T0
+ , list24< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24 >
+ >
+{
+ typedef list25 type;
+};
+
+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
+ >
+struct list26
+ : l_item<
+ long_<26>
+ , T0
+ , list25< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25 >
+ >
+{
+ typedef list26 type;
+};
+
+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
+ >
+struct list27
+ : l_item<
+ long_<27>
+ , T0
+ , list26< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26 >
+ >
+{
+ typedef list27 type;
+};
+
+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
+ >
+struct list28
+ : l_item<
+ long_<28>
+ , T0
+ , list27< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27 >
+ >
+{
+ typedef list28 type;
+};
+
+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
+ >
+struct list29
+ : l_item<
+ long_<29>
+ , T0
+ , list28< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28 >
+ >
+{
+ typedef list29 type;
+};
+
+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 list30
+ : l_item<
+ long_<30>
+ , T0
+ , list29< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29 >
+ >
+{
+ typedef list30 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp
new file mode 100644
index 0000000..5393d79
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp
@@ -0,0 +1,183 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list30_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ >
+struct list21_c
+ : l_item<
+ long_<21>
+ , integral_c< T,C0 >
+ , list20_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20 >
+ >
+{
+ typedef list21_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21
+ >
+struct list22_c
+ : l_item<
+ long_<22>
+ , integral_c< T,C0 >
+ , list21_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21 >
+ >
+{
+ typedef list22_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22
+ >
+struct list23_c
+ : l_item<
+ long_<23>
+ , integral_c< T,C0 >
+ , list22_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22 >
+ >
+{
+ typedef list23_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23
+ >
+struct list24_c
+ : l_item<
+ long_<24>
+ , integral_c< T,C0 >
+ , list23_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23 >
+ >
+{
+ typedef list24_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24
+ >
+struct list25_c
+ : l_item<
+ long_<25>
+ , integral_c< T,C0 >
+ , list24_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24 >
+ >
+{
+ typedef list25_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25
+ >
+struct list26_c
+ : l_item<
+ long_<26>
+ , integral_c< T,C0 >
+ , list25_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25 >
+ >
+{
+ typedef list26_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26
+ >
+struct list27_c
+ : l_item<
+ long_<27>
+ , integral_c< T,C0 >
+ , list26_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26 >
+ >
+{
+ typedef list27_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27
+ >
+struct list28_c
+ : l_item<
+ long_<28>
+ , integral_c< T,C0 >
+ , list27_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27 >
+ >
+{
+ typedef list28_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28
+ >
+struct list29_c
+ : l_item<
+ long_<29>
+ , integral_c< T,C0 >
+ , list28_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28 >
+ >
+{
+ typedef list29_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29
+ >
+struct list30_c
+ : l_item<
+ long_<30>
+ , integral_c< T,C0 >
+ , list29_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29 >
+ >
+{
+ typedef list30_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40.hpp
new file mode 100644
index 0000000..68c6761
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40.hpp
@@ -0,0 +1,209 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list40.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+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
+ >
+struct list31
+ : l_item<
+ long_<31>
+ , T0
+ , list30< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30 >
+ >
+{
+ typedef list31 type;
+};
+
+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
+ >
+struct list32
+ : l_item<
+ long_<32>
+ , T0
+ , list31< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31 >
+ >
+{
+ typedef list32 type;
+};
+
+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
+ >
+struct list33
+ : l_item<
+ long_<33>
+ , T0
+ , list32< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32 >
+ >
+{
+ typedef list33 type;
+};
+
+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
+ >
+struct list34
+ : l_item<
+ long_<34>
+ , T0
+ , list33< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33 >
+ >
+{
+ typedef list34 type;
+};
+
+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
+ >
+struct list35
+ : l_item<
+ long_<35>
+ , T0
+ , list34< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34 >
+ >
+{
+ typedef list35 type;
+};
+
+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
+ >
+struct list36
+ : l_item<
+ long_<36>
+ , T0
+ , list35< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35 >
+ >
+{
+ typedef list36 type;
+};
+
+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
+ >
+struct list37
+ : l_item<
+ long_<37>
+ , T0
+ , list36< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36 >
+ >
+{
+ typedef list37 type;
+};
+
+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
+ >
+struct list38
+ : l_item<
+ long_<38>
+ , T0
+ , list37< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37 >
+ >
+{
+ typedef list38 type;
+};
+
+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
+ >
+struct list39
+ : l_item<
+ long_<39>
+ , T0
+ , list38< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38 >
+ >
+{
+ typedef list39 type;
+};
+
+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 list40
+ : l_item<
+ long_<40>
+ , T0
+ , list39< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39 >
+ >
+{
+ typedef list40 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp
new file mode 100644
index 0000000..0c51ba2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp
@@ -0,0 +1,193 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list40_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ >
+struct list31_c
+ : l_item<
+ long_<31>
+ , integral_c< T,C0 >
+ , list30_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30 >
+ >
+{
+ typedef list31_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31
+ >
+struct list32_c
+ : l_item<
+ long_<32>
+ , integral_c< T,C0 >
+ , list31_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31 >
+ >
+{
+ typedef list32_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32
+ >
+struct list33_c
+ : l_item<
+ long_<33>
+ , integral_c< T,C0 >
+ , list32_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32 >
+ >
+{
+ typedef list33_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33
+ >
+struct list34_c
+ : l_item<
+ long_<34>
+ , integral_c< T,C0 >
+ , list33_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33 >
+ >
+{
+ typedef list34_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34
+ >
+struct list35_c
+ : l_item<
+ long_<35>
+ , integral_c< T,C0 >
+ , list34_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34 >
+ >
+{
+ typedef list35_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35
+ >
+struct list36_c
+ : l_item<
+ long_<36>
+ , integral_c< T,C0 >
+ , list35_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35 >
+ >
+{
+ typedef list36_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36
+ >
+struct list37_c
+ : l_item<
+ long_<37>
+ , integral_c< T,C0 >
+ , list36_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36 >
+ >
+{
+ typedef list37_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37
+ >
+struct list38_c
+ : l_item<
+ long_<38>
+ , integral_c< T,C0 >
+ , list37_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37 >
+ >
+{
+ typedef list38_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38
+ >
+struct list39_c
+ : l_item<
+ long_<39>
+ , integral_c< T,C0 >
+ , list38_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38 >
+ >
+{
+ typedef list39_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39
+ >
+struct list40_c
+ : l_item<
+ long_<40>
+ , integral_c< T,C0 >
+ , list39_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39 >
+ >
+{
+ typedef list40_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50.hpp
new file mode 100644
index 0000000..4cc22da
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50.hpp
@@ -0,0 +1,229 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list50.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+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
+ >
+struct list41
+ : l_item<
+ long_<41>
+ , T0
+ , list40< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40 >
+ >
+{
+ typedef list41 type;
+};
+
+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
+ >
+struct list42
+ : l_item<
+ long_<42>
+ , T0
+ , list41< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41 >
+ >
+{
+ typedef list42 type;
+};
+
+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
+ >
+struct list43
+ : l_item<
+ long_<43>
+ , T0
+ , list42< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42 >
+ >
+{
+ typedef list43 type;
+};
+
+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
+ >
+struct list44
+ : l_item<
+ long_<44>
+ , T0
+ , list43< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43 >
+ >
+{
+ typedef list44 type;
+};
+
+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
+ >
+struct list45
+ : l_item<
+ long_<45>
+ , T0
+ , list44< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44 >
+ >
+{
+ typedef list45 type;
+};
+
+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
+ >
+struct list46
+ : l_item<
+ long_<46>
+ , T0
+ , list45< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45 >
+ >
+{
+ typedef list46 type;
+};
+
+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
+ >
+struct list47
+ : l_item<
+ long_<47>
+ , T0
+ , list46< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46 >
+ >
+{
+ typedef list47 type;
+};
+
+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
+ >
+struct list48
+ : l_item<
+ long_<48>
+ , T0
+ , list47< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47 >
+ >
+{
+ typedef list48 type;
+};
+
+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
+ >
+struct list49
+ : l_item<
+ long_<49>
+ , T0
+ , list48< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48 >
+ >
+{
+ typedef list49 type;
+};
+
+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 list50
+ : l_item<
+ long_<50>
+ , T0
+ , list49< T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,T31,T32,T33,T34,T35,T36,T37,T38,T39,T40,T41,T42,T43,T44,T45,T46,T47,T48,T49 >
+ >
+{
+ typedef list50 type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp
new file mode 100644
index 0000000..28c061d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp
@@ -0,0 +1,203 @@
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+// Preprocessed version of "boost/mpl/list/list50_c.hpp" header
+// -- DO NOT modify by hand!
+
+namespace boost { namespace mpl {
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+ >
+struct list41_c
+ : l_item<
+ long_<41>
+ , integral_c< T,C0 >
+ , list40_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40 >
+ >
+{
+ typedef list41_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+ , T C41
+ >
+struct list42_c
+ : l_item<
+ long_<42>
+ , integral_c< T,C0 >
+ , list41_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41 >
+ >
+{
+ typedef list42_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+ , T C41, T C42
+ >
+struct list43_c
+ : l_item<
+ long_<43>
+ , integral_c< T,C0 >
+ , list42_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42 >
+ >
+{
+ typedef list43_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+ , T C41, T C42, T C43
+ >
+struct list44_c
+ : l_item<
+ long_<44>
+ , integral_c< T,C0 >
+ , list43_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43 >
+ >
+{
+ typedef list44_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+ , T C41, T C42, T C43, T C44
+ >
+struct list45_c
+ : l_item<
+ long_<45>
+ , integral_c< T,C0 >
+ , list44_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44 >
+ >
+{
+ typedef list45_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+ , T C41, T C42, T C43, T C44, T C45
+ >
+struct list46_c
+ : l_item<
+ long_<46>
+ , integral_c< T,C0 >
+ , list45_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45 >
+ >
+{
+ typedef list46_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+ , T C41, T C42, T C43, T C44, T C45, T C46
+ >
+struct list47_c
+ : l_item<
+ long_<47>
+ , integral_c< T,C0 >
+ , list46_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46 >
+ >
+{
+ typedef list47_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+ , T C41, T C42, T C43, T C44, T C45, T C46, T C47
+ >
+struct list48_c
+ : l_item<
+ long_<48>
+ , integral_c< T,C0 >
+ , list47_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47 >
+ >
+{
+ typedef list48_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+ , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48
+ >
+struct list49_c
+ : l_item<
+ long_<49>
+ , integral_c< T,C0 >
+ , list48_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48 >
+ >
+{
+ typedef list49_c type;
+ typedef T value_type;
+};
+
+template<
+ typename T
+ , T C0, T C1, T C2, T C3, T C4, T C5, T C6, T C7, T C8, T C9, T C10
+ , T C11, T C12, T C13, T C14, T C15, T C16, T C17, T C18, T C19, T C20
+ , T C21, T C22, T C23, T C24, T C25, T C26, T C27, T C28, T C29, T C30
+ , T C31, T C32, T C33, T C34, T C35, T C36, T C37, T C38, T C39, T C40
+ , T C41, T C42, T C43, T C44, T C45, T C46, T C47, T C48, T C49
+ >
+struct list50_c
+ : l_item<
+ long_<50>
+ , integral_c< T,C0 >
+ , list49_c< T,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32,C33,C34,C35,C36,C37,C38,C39,C40,C41,C42,C43,C44,C45,C46,C47,C48,C49 >
+ >
+{
+ typedef list50_c type;
+ typedef T value_type;
+};
+
+}}
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/push_back.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/push_back.hpp
new file mode 100644
index 0000000..6adb7db
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/push_back.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/push_back_fwd.hpp>
+#include <boost/mpl/bool.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename Tag > struct has_push_back_impl;
+
+template<>
+struct has_push_back_impl< aux::list_tag >
+{
+ template< typename Seq > struct apply
+ : false_
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_PUSH_BACK_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/push_front.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/push_front.hpp
new file mode 100644
index 0000000..a601fea
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/push_front.hpp
@@ -0,0 +1,39 @@
+
+#ifndef BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/push_front_fwd.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/list/aux_/item.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct push_front_impl< aux::list_tag >
+{
+ template< typename List, typename T > struct apply
+ {
+ typedef l_item<
+ typename next<typename List::size>::type
+ , T
+ , typename List::type
+ > type;
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_PUSH_FRONT_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/size.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/size.hpp
new file mode 100644
index 0000000..4ecbab8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/size.hpp
@@ -0,0 +1,33 @@
+
+#ifndef BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: size.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/size_fwd.hpp>
+#include <boost/mpl/list/aux_/tag.hpp>
+
+namespace boost { namespace mpl {
+
+template<>
+struct size_impl< aux::list_tag >
+{
+ template< typename List > struct apply
+ : List::size
+ {
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_AUX_SIZE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/aux_/tag.hpp b/3rdParty/Boost/src/boost/mpl/list/aux_/tag.hpp
new file mode 100644
index 0000000..d44bfe4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/aux_/tag.hpp
@@ -0,0 +1,24 @@
+
+#ifndef BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED
+#define BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: tag.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+namespace boost { namespace mpl { namespace aux {
+
+struct list_tag;
+struct l_iter_tag;
+
+}}}
+
+#endif // BOOST_MPL_LIST_AUX_TAG_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list0.hpp b/3rdParty/Boost/src/boost/mpl/list/list0.hpp
new file mode 100644
index 0000000..58e93cf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list0.hpp
@@ -0,0 +1,42 @@
+
+#ifndef BOOST_MPL_LIST_LIST0_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST0_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list0.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/long.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/list/aux_/push_front.hpp>
+#include <boost/mpl/list/aux_/pop_front.hpp>
+#include <boost/mpl/list/aux_/push_back.hpp>
+#include <boost/mpl/list/aux_/front.hpp>
+#include <boost/mpl/list/aux_/clear.hpp>
+#include <boost/mpl/list/aux_/O1_size.hpp>
+#include <boost/mpl/list/aux_/size.hpp>
+#include <boost/mpl/list/aux_/empty.hpp>
+#include <boost/mpl/list/aux_/begin_end.hpp>
+#include <boost/mpl/list/aux_/item.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename Dummy = na > struct list0;
+
+template<> struct list0<na>
+ : l_end
+{
+ typedef l_end type;
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_LIST0_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list0_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list0_c.hpp
new file mode 100644
index 0000000..ed9bca5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list0_c.hpp
@@ -0,0 +1,31 @@
+
+#ifndef BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list0_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/list/list0.hpp>
+#include <boost/mpl/integral_c.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename T > struct list0_c
+ : l_end
+{
+ typedef l_end type;
+ typedef T value_type;
+};
+
+}}
+
+#endif // BOOST_MPL_LIST_LIST0_C_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list10.hpp b/3rdParty/Boost/src/boost/mpl/list/list10.hpp
new file mode 100644
index 0000000..4a4ee19
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list10.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST10_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST10_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list10.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/list/list0.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list10.hpp
+# include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(1, 10, <boost/mpl/list/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST10_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list10_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list10_c.hpp
new file mode 100644
index 0000000..e05ef87
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list10_c.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list10_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/list/list0_c.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list10_c.hpp
+# include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(1, 10, <boost/mpl/list/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST10_C_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list20.hpp b/3rdParty/Boost/src/boost/mpl/list/list20.hpp
new file mode 100644
index 0000000..9321192
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list20.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST20_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST20_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list20.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/list/list10.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list20.hpp
+# include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(11, 20, <boost/mpl/list/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST20_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list20_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list20_c.hpp
new file mode 100644
index 0000000..bc807e6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list20_c.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list20_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/list/list10_c.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list20_c.hpp
+# include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(11, 20, <boost/mpl/list/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST20_C_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list30.hpp b/3rdParty/Boost/src/boost/mpl/list/list30.hpp
new file mode 100644
index 0000000..f736f8c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list30.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST30_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST30_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list30.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/list/list20.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list30.hpp
+# include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(21, 30, <boost/mpl/list/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST30_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list30_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list30_c.hpp
new file mode 100644
index 0000000..e682086
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list30_c.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list30_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/list/list20_c.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list30_c.hpp
+# include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(21, 30, <boost/mpl/list/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST30_C_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list40.hpp b/3rdParty/Boost/src/boost/mpl/list/list40.hpp
new file mode 100644
index 0000000..8560d8f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list40.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST40_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST40_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list40.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/list/list30.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list40.hpp
+# include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(31, 40, <boost/mpl/list/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST40_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list40_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list40_c.hpp
new file mode 100644
index 0000000..5c5bfdf
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list40_c.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list40_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/list/list30_c.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list40_c.hpp
+# include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(31, 40, <boost/mpl/list/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST40_C_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list50.hpp b/3rdParty/Boost/src/boost/mpl/list/list50.hpp
new file mode 100644
index 0000000..dcaf18e
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list50.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST50_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST50_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list50.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/list/list40.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list50.hpp
+# include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(41, 50, <boost/mpl/list/aux_/numbered.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST50_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/list/list50_c.hpp b/3rdParty/Boost/src/boost/mpl/list/list50_c.hpp
new file mode 100644
index 0000000..0f38e07
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/list/list50_c.hpp
@@ -0,0 +1,43 @@
+
+#ifndef BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED
+#define BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: list50_c.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#if !defined(BOOST_MPL_PREPROCESSING_MODE)
+# include <boost/mpl/list/list40_c.hpp>
+#endif
+
+#include <boost/mpl/aux_/config/use_preprocessed.hpp>
+
+#if !defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
+ && !defined(BOOST_MPL_PREPROCESSING_MODE)
+
+# define BOOST_MPL_PREPROCESSED_HEADER list50_c.hpp
+# include <boost/mpl/list/aux_/include_preprocessed.hpp>
+
+#else
+
+# include <boost/preprocessor/iterate.hpp>
+
+namespace boost { namespace mpl {
+
+# define BOOST_PP_ITERATION_PARAMS_1 \
+ (3,(41, 50, <boost/mpl/list/aux_/numbered_c.hpp>))
+# include BOOST_PP_ITERATE()
+
+}}
+
+#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
+
+#endif // BOOST_MPL_LIST_LIST50_C_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/max_element.hpp b/3rdParty/Boost/src/boost/mpl/max_element.hpp
new file mode 100644
index 0000000..6d16dfc
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/max_element.hpp
@@ -0,0 +1,72 @@
+
+#ifndef BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED
+#define BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: max_element.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/iter_fold.hpp>
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/apply.hpp>
+#include <boost/mpl/aux_/common_name_wknd.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace boost { namespace mpl {
+
+BOOST_MPL_AUX_COMMON_NAME_WKND(max_element)
+
+namespace aux {
+
+template< typename Predicate >
+struct select_max
+{
+ template< typename OldIterator, typename Iterator >
+ struct apply
+ {
+ typedef typename apply2<
+ Predicate
+ , typename deref<OldIterator>::type
+ , typename deref<Iterator>::type
+ >::type condition_;
+
+ typedef typename if_<
+ condition_
+ , Iterator
+ , OldIterator
+ >::type type;
+ };
+};
+
+} // namespace aux
+
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename Predicate = less<_,_>
+ >
+struct max_element
+ : iter_fold<
+ Sequence
+ , typename begin<Sequence>::type
+ , protect< aux::select_max<Predicate> >
+ >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(1, max_element)
+
+}}
+
+#endif // BOOST_MPL_MAX_ELEMENT_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/min_max.hpp b/3rdParty/Boost/src/boost/mpl/min_max.hpp
new file mode 100644
index 0000000..944b776
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/min_max.hpp
@@ -0,0 +1,46 @@
+
+#ifndef BOOST_MPL_MIN_MAX_HPP_INCLUDED
+#define BOOST_MPL_MIN_MAX_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2008
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: min_max.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct min
+ : if_< less<N1,N2>,N1,N2 >
+{
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(N1)
+ , typename BOOST_MPL_AUX_NA_PARAM(N2)
+ >
+struct max
+ : if_< less<N1,N2>,N2,N1 >
+{
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, min)
+BOOST_MPL_AUX_NA_SPEC(2, max)
+
+}}
+
+#endif // BOOST_MPL_MIN_MAX_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/pair.hpp b/3rdParty/Boost/src/boost/mpl/pair.hpp
new file mode 100644
index 0000000..b3fb026
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/pair.hpp
@@ -0,0 +1,70 @@
+
+#ifndef BOOST_MPL_PAIR_HPP_INCLUDED
+#define BOOST_MPL_PAIR_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: pair.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/aux_/msvc_eti_base.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+#include <boost/mpl/aux_/config/eti.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T1)
+ , typename BOOST_MPL_AUX_NA_PARAM(T2)
+ >
+struct pair
+{
+ typedef pair type;
+ typedef T1 first;
+ typedef T2 second;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,pair,(T1,T2))
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(P)
+ >
+struct first
+{
+#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
+ typedef typename P::first type;
+#else
+ typedef typename aux::msvc_eti_base<P>::first type;
+#endif
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,first,(P))
+};
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(P)
+ >
+struct second
+{
+#if !defined(BOOST_MPL_CFG_MSVC_70_ETI_BUG)
+ typedef typename P::second type;
+#else
+ typedef typename aux::msvc_eti_base<P>::second type;
+#endif
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,second,(P))
+};
+
+
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(2, pair)
+BOOST_MPL_AUX_NA_SPEC(1, first)
+BOOST_MPL_AUX_NA_SPEC(1, second)
+
+}}
+
+#endif // BOOST_MPL_PAIR_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/pair_view.hpp b/3rdParty/Boost/src/boost/mpl/pair_view.hpp
new file mode 100644
index 0000000..43430f5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/pair_view.hpp
@@ -0,0 +1,169 @@
+
+#ifndef BOOST_MPL_PAIR_VIEW_HPP_INCLUDED
+#define BOOST_MPL_PAIR_VIEW_HPP_INCLUDED
+
+// Copyright David Abrahams 2003-2004
+// Copyright Aleksey Gurtovoy 2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: pair_view.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/iterator_category.hpp>
+#include <boost/mpl/advance.hpp>
+#include <boost/mpl/distance.hpp>
+#include <boost/mpl/next_prior.hpp>
+#include <boost/mpl/deref.hpp>
+#include <boost/mpl/min_max.hpp>
+#include <boost/mpl/pair.hpp>
+#include <boost/mpl/iterator_tags.hpp>
+#include <boost/mpl/aux_/config/ctps.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+struct pair_iter_tag;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Iter1, typename Iter2, typename Category >
+struct pair_iter;
+
+template< typename Category > struct prior_pair_iter
+{
+ template< typename Iter1, typename Iter2 > struct apply
+ {
+ typedef typename mpl::prior<Iter1>::type i1_;
+ typedef typename mpl::prior<Iter2>::type i2_;
+ typedef pair_iter<i1_,i2_,Category> type;
+ };
+};
+
+template<> struct prior_pair_iter<forward_iterator_tag>
+{
+ template< typename Iter1, typename Iter2 > struct apply
+ {
+ typedef pair_iter<Iter1,Iter2,forward_iterator_tag> type;
+ };
+};
+
+#endif
+}
+
+template<
+ typename Iter1
+ , typename Iter2
+ , typename Category
+ >
+struct pair_iter
+{
+ typedef aux::pair_iter_tag tag;
+ typedef Category category;
+ typedef Iter1 first;
+ typedef Iter2 second;
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+ typedef pair<
+ typename deref<Iter1>::type
+ , typename deref<Iter2>::type
+ > type;
+
+ typedef typename mpl::next<Iter1>::type i1_;
+ typedef typename mpl::next<Iter2>::type i2_;
+ typedef pair_iter<i1_,i2_,Category> next;
+
+ typedef apply_wrap2< aux::prior_pair_iter<Category>,Iter1,Iter2 >::type prior;
+#endif
+};
+
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template< typename Iter1, typename Iter2, typename C >
+struct deref< pair_iter<Iter1,Iter2,C> >
+{
+ typedef pair<
+ typename deref<Iter1>::type
+ , typename deref<Iter2>::type
+ > type;
+};
+
+template< typename Iter1, typename Iter2, typename C >
+struct next< pair_iter<Iter1,Iter2,C> >
+{
+ typedef typename mpl::next<Iter1>::type i1_;
+ typedef typename mpl::next<Iter2>::type i2_;
+ typedef pair_iter<i1_,i2_,C> type;
+};
+
+template< typename Iter1, typename Iter2, typename C >
+struct prior< pair_iter<Iter1,Iter2,C> >
+{
+ typedef typename mpl::prior<Iter1>::type i1_;
+ typedef typename mpl::prior<Iter2>::type i2_;
+ typedef pair_iter<i1_,i2_,C> type;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+
+
+template<> struct advance_impl<aux::pair_iter_tag>
+{
+ template< typename Iter, typename D > struct apply
+ {
+ typedef typename mpl::advance< typename Iter::first,D >::type i1_;
+ typedef typename mpl::advance< typename Iter::second,D >::type i2_;
+ typedef pair_iter<i1_,i2_,typename Iter::category> type;
+ };
+};
+
+template<> struct distance_impl<aux::pair_iter_tag>
+{
+ template< typename Iter1, typename Iter2 > struct apply
+ {
+ // agurt, 10/nov/04: MSVC 6.5 ICE-s on forwarding
+ typedef typename mpl::distance<
+ typename first<Iter1>::type
+ , typename first<Iter2>::type
+ >::type type;
+ };
+};
+
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence1)
+ , typename BOOST_MPL_AUX_NA_PARAM(Sequence2)
+ >
+struct pair_view
+{
+ typedef nested_begin_end_tag tag;
+
+ typedef typename begin<Sequence1>::type iter1_;
+ typedef typename begin<Sequence2>::type iter2_;
+ typedef typename min<
+ typename iterator_category<iter1_>::type
+ , typename iterator_category<iter2_>::type
+ >::type category_;
+
+ typedef pair_iter<iter1_,iter2_,category_> begin;
+
+ typedef pair_iter<
+ typename end<Sequence1>::type
+ , typename end<Sequence2>::type
+ , category_
+ > end;
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, pair_view)
+
+}}
+
+#endif // BOOST_MPL_PAIR_VIEW_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/push_back.hpp b/3rdParty/Boost/src/boost/mpl/push_back.hpp
new file mode 100644
index 0000000..96389a3
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/push_back.hpp
@@ -0,0 +1,53 @@
+
+#ifndef BOOST_MPL_PUSH_BACK_HPP_INCLUDED
+#define BOOST_MPL_PUSH_BACK_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: push_back.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/push_back_fwd.hpp>
+#include <boost/mpl/aux_/push_back_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct push_back
+ : push_back_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence,T >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,push_back,(Sequence,T))
+};
+
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct has_push_back
+ : has_push_back_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_push_back,(Sequence))
+};
+
+
+BOOST_MPL_AUX_NA_SPEC(2, push_back)
+BOOST_MPL_AUX_NA_SPEC(1, has_push_back)
+
+}}
+
+#endif // BOOST_MPL_PUSH_BACK_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/push_front.hpp b/3rdParty/Boost/src/boost/mpl/push_front.hpp
new file mode 100644
index 0000000..3c4283c
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/push_front.hpp
@@ -0,0 +1,52 @@
+
+#ifndef BOOST_MPL_PUSH_FRONT_HPP_INCLUDED
+#define BOOST_MPL_PUSH_FRONT_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: push_front.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/push_front_fwd.hpp>
+#include <boost/mpl/aux_/push_front_impl.hpp>
+#include <boost/mpl/sequence_tag.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct push_front
+ : push_front_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence,T >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(2,push_front,(Sequence,T))
+};
+
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ >
+struct has_push_front
+ : has_push_front_impl< typename sequence_tag<Sequence>::type >
+ ::template apply< Sequence >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,has_push_front,(Sequence))
+};
+
+BOOST_MPL_AUX_NA_SPEC(2, push_front)
+BOOST_MPL_AUX_NA_SPEC(1, has_push_front)
+
+}}
+
+#endif // BOOST_MPL_PUSH_FRONT_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/reverse_fold.hpp b/3rdParty/Boost/src/boost/mpl/reverse_fold.hpp
new file mode 100644
index 0000000..79b6ec7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/reverse_fold.hpp
@@ -0,0 +1,50 @@
+
+#ifndef BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED
+#define BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2001-2004
+// Copyright David Abrahams 2001-2002
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: reverse_fold.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/begin_end.hpp>
+#include <boost/mpl/O1_size.hpp>
+#include <boost/mpl/arg.hpp>
+#include <boost/mpl/aux_/reverse_fold_impl.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(Sequence)
+ , typename BOOST_MPL_AUX_NA_PARAM(State)
+ , typename BOOST_MPL_AUX_NA_PARAM(BackwardOp)
+ , typename ForwardOp = arg<1>
+ >
+struct reverse_fold
+{
+ typedef typename aux::reverse_fold_impl<
+ ::boost::mpl::O1_size<Sequence>::value
+ , typename begin<Sequence>::type
+ , typename end<Sequence>::type
+ , State
+ , BackwardOp
+ , ForwardOp
+ >::state type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(3,reverse_fold,(Sequence,State,BackwardOp))
+};
+
+BOOST_MPL_AUX_NA_SPEC(3, reverse_fold)
+
+}}
+
+#endif // BOOST_MPL_REVERSE_FOLD_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/same_as.hpp b/3rdParty/Boost/src/boost/mpl/same_as.hpp
new file mode 100644
index 0000000..e95d55f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/same_as.hpp
@@ -0,0 +1,55 @@
+
+#ifndef BOOST_MPL_SAME_AS_HPP_INCLUDED
+#define BOOST_MPL_SAME_AS_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: same_as.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/aux_/lambda_spec.hpp>
+#include <boost/mpl/aux_/config/forwarding.hpp>
+
+#include <boost/type_traits/is_same.hpp>
+
+namespace boost { namespace mpl {
+
+template< typename T1 >
+struct same_as
+{
+ template< typename T2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : is_same<T1,T2>
+ {
+#else
+ {
+ typedef typename is_same<T1,T2>::type type;
+#endif
+ };
+};
+
+template< typename T1 >
+struct not_same_as
+{
+ template< typename T2 > struct apply
+#if !defined(BOOST_MPL_CFG_NO_NESTED_FORWARDING)
+ : not_< is_same<T1,T2> >
+ {
+#else
+ {
+ typedef typename not_< is_same<T1,T2> >::type type;
+#endif
+ };
+};
+
+}}
+
+#endif // BOOST_MPL_SAME_AS_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/sizeof.hpp b/3rdParty/Boost/src/boost/mpl/sizeof.hpp
new file mode 100644
index 0000000..8ad9d24
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/sizeof.hpp
@@ -0,0 +1,36 @@
+
+#ifndef BOOST_MPL_SIZEOF_HPP_INCLUDED
+#define BOOST_MPL_SIZEOF_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2003
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: sizeof.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/size_t.hpp>
+#include <boost/mpl/aux_/na_spec.hpp>
+#include <boost/mpl/aux_/lambda_support.hpp>
+
+namespace boost { namespace mpl {
+
+template<
+ typename BOOST_MPL_AUX_NA_PARAM(T)
+ >
+struct sizeof_
+ : mpl::size_t< sizeof(T) >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,sizeof_,(T))
+};
+
+BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, sizeof_)
+
+}}
+
+#endif // BOOST_MPL_SIZEOF_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/mpl/transform.hpp b/3rdParty/Boost/src/boost/mpl/transform.hpp
new file mode 100644
index 0000000..f367207
--- /dev/null
+++ b/3rdParty/Boost/src/boost/mpl/transform.hpp
@@ -0,0 +1,145 @@
+
+#ifndef BOOST_MPL_TRANSFORM_HPP_INCLUDED
+#define BOOST_MPL_TRANSFORM_HPP_INCLUDED
+
+// Copyright Aleksey Gurtovoy 2000-2004
+// Copyright David Abrahams 2003-2004
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org/libs/mpl for documentation.
+
+// $Id: transform.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
+// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
+// $Revision: 49267 $
+
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/reverse_fold.hpp>
+#include <boost/mpl/pair_view.hpp>
+#include <boost/mpl/is_sequence.hpp>
+#include <boost/mpl/eval_if.hpp>
+#include <boost/mpl/lambda.hpp>
+#include <boost/mpl/bind.hpp>
+#include <boost/mpl/or.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/aux_/na.hpp>
+#include <boost/mpl/aux_/inserter_algorithm.hpp>
+
+namespace boost { namespace mpl {
+
+namespace aux {
+
+template<
+ typename Seq
+ , typename Op
+ , typename In
+ >
+struct transform1_impl
+ : fold<
+ Seq
+ , typename In::state
+ , bind2< typename lambda< typename In::operation >::type
+ , _1
+ , bind1< typename lambda<Op>::type, _2>
+ >
+ >
+{
+};
+
+template<
+ typename Seq
+ , typename Op
+ , typename In
+ >
+struct reverse_transform1_impl
+ : reverse_fold<
+ Seq
+ , typename In::state
+ , bind2< typename lambda< typename In::operation >::type
+ , _1
+ , bind1< typename lambda<Op>::type, _2>
+ >
+ >
+{
+};
+
+template<
+ typename Seq1
+ , typename Seq2
+ , typename Op
+ , typename In
+ >
+struct transform2_impl
+ : fold<
+ pair_view<Seq1,Seq2>
+ , typename In::state
+ , bind2< typename lambda< typename In::operation >::type
+ , _1
+ , bind2<
+ typename lambda<Op>::type
+ , bind1<first<>,_2>
+ , bind1<second<>,_2>
+ >
+ >
+ >
+{
+};
+
+template<
+ typename Seq1
+ , typename Seq2
+ , typename Op
+ , typename In
+ >
+struct reverse_transform2_impl
+ : reverse_fold<
+ pair_view<Seq1,Seq2>
+ , typename In::state
+ , bind2< typename lambda< typename In::operation >::type
+ , _1
+ , bind2< typename lambda< Op >::type
+ , bind1<first<>,_2>
+ , bind1<second<>,_2>
+ >
+ >
+ >
+{
+};
+
+} // namespace aux
+
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, transform1)
+BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, transform2)
+
+#define AUX778076_TRANSFORM_DEF(name) \
+template< \
+ typename BOOST_MPL_AUX_NA_PARAM(Seq1) \
+ , typename BOOST_MPL_AUX_NA_PARAM(Seq2OrOperation) \
+ , typename BOOST_MPL_AUX_NA_PARAM(OperationOrInserter) \
+ , typename BOOST_MPL_AUX_NA_PARAM(Inserter) \
+ > \
+struct name \
+{ \
+ typedef typename eval_if< \
+ or_< \
+ is_na<OperationOrInserter> \
+ , is_lambda_expression< Seq2OrOperation > \
+ , not_< is_sequence<Seq2OrOperation> > \
+ > \
+ , name##1<Seq1,Seq2OrOperation,OperationOrInserter> \
+ , name##2<Seq1,Seq2OrOperation,OperationOrInserter,Inserter> \
+ >::type type; \
+}; \
+BOOST_MPL_AUX_NA_SPEC(4, name) \
+/**/
+
+AUX778076_TRANSFORM_DEF(transform)
+AUX778076_TRANSFORM_DEF(reverse_transform)
+
+#undef AUX778076_TRANSFORM_DEF
+
+}}
+
+#endif // BOOST_MPL_TRANSFORM_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/variant.hpp b/3rdParty/Boost/src/boost/variant.hpp
new file mode 100644
index 0000000..6088c5d
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant.hpp
@@ -0,0 +1,27 @@
+//-----------------------------------------------------------------------------
+// boost variant.hpp header file
+// See http://www.boost.org/libs/variant for documentation.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_HPP
+#define BOOST_VARIANT_HPP
+
+// variant "main"
+#include "boost/variant/variant.hpp"
+#include "boost/variant/recursive_variant.hpp"
+#include "boost/variant/recursive_wrapper.hpp"
+
+// common applications
+#include "boost/variant/get.hpp"
+#include "boost/variant/apply_visitor.hpp"
+#include "boost/variant/static_visitor.hpp"
+#include "boost/variant/visitor_ptr.hpp"
+
+#endif // BOOST_VARIANT_HPP
diff --git a/3rdParty/Boost/src/boost/variant/apply_visitor.hpp b/3rdParty/Boost/src/boost/variant/apply_visitor.hpp
new file mode 100644
index 0000000..53bada0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/apply_visitor.hpp
@@ -0,0 +1,20 @@
+//-----------------------------------------------------------------------------
+// boost variant/apply_visitor.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_APPLY_VISITOR_HPP
+#define BOOST_VARIANT_APPLY_VISITOR_HPP
+
+#include "boost/variant/detail/apply_visitor_unary.hpp"
+#include "boost/variant/detail/apply_visitor_binary.hpp"
+#include "boost/variant/detail/apply_visitor_delayed.hpp"
+
+#endif // BOOST_VARIANT_APPLY_VISITOR_HPP
diff --git a/3rdParty/Boost/src/boost/variant/bad_visit.hpp b/3rdParty/Boost/src/boost/variant/bad_visit.hpp
new file mode 100644
index 0000000..ca53940
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/bad_visit.hpp
@@ -0,0 +1,41 @@
+//-----------------------------------------------------------------------------
+// boost variant/bad_visit.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_BAD_VISIT_HPP
+#define BOOST_VARIANT_BAD_VISIT_HPP
+
+#include <exception>
+
+namespace boost {
+
+//////////////////////////////////////////////////////////////////////////
+// class bad_visit
+//
+// Exception thrown when a visitation attempt via apply_visitor fails due
+// to invalid visited subtype or contents.
+//
+struct bad_visit
+ : std::exception
+{
+public: // std::exception interface
+
+ virtual const char * what() const throw()
+ {
+ return "boost::bad_visit: "
+ "failed visitation using boost::apply_visitor";
+ }
+
+};
+
+} // namespace boost
+
+#endif // BOOST_VARIANT_BAD_VISIT_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/apply_visitor_binary.hpp b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_binary.hpp
new file mode 100644
index 0000000..92cdb42
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_binary.hpp
@@ -0,0 +1,172 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/apply_visitor_binary.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_APPLY_VISITOR_BINARY_HPP
+#define BOOST_VARIANT_DETAIL_APPLY_VISITOR_BINARY_HPP
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+#include "boost/variant/detail/generic_result_type.hpp"
+
+#include "boost/variant/detail/apply_visitor_unary.hpp"
+
+#include "boost/utility/enable_if.hpp"
+
+namespace boost {
+
+//////////////////////////////////////////////////////////////////////////
+// function template apply_visitor(visitor, visitable1, visitable2)
+//
+// Visits visitable1 and visitable2 such that their values (which we
+// shall call x and y, respectively) are used as arguments in the
+// expression visitor(x, y).
+//
+
+namespace detail { namespace variant {
+
+template <typename Visitor, typename Value1>
+class apply_visitor_binary_invoke
+{
+public: // visitor typedefs
+
+ typedef typename Visitor::result_type
+ result_type;
+
+private: // representation
+
+ Visitor& visitor_;
+ Value1& value1_;
+
+public: // structors
+
+ apply_visitor_binary_invoke(Visitor& visitor, Value1& value1)
+ : visitor_(visitor)
+ , value1_(value1)
+ {
+ }
+
+public: // visitor interfaces
+
+ template <typename Value2>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ operator()(Value2& value2)
+ {
+ return visitor_(value1_, value2);
+ }
+
+};
+
+template <typename Visitor, typename Visitable2>
+class apply_visitor_binary_unwrap
+{
+public: // visitor typedefs
+
+ typedef typename Visitor::result_type
+ result_type;
+
+private: // representation
+
+ Visitor& visitor_;
+ Visitable2& visitable2_;
+
+public: // structors
+
+ apply_visitor_binary_unwrap(Visitor& visitor, Visitable2& visitable2)
+ : visitor_(visitor)
+ , visitable2_(visitable2)
+ {
+ }
+
+public: // visitor interfaces
+
+ template <typename Value1>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ operator()(Value1& value1)
+ {
+ apply_visitor_binary_invoke<
+ Visitor
+ , Value1
+ > invoker(visitor_, value1);
+
+ return boost::apply_visitor(invoker, visitable2_);
+ }
+
+};
+
+}} // namespace detail::variant
+
+//
+// nonconst-visitor version:
+//
+
+#if !BOOST_WORKAROUND(__EDG__, BOOST_TESTED_AT(302))
+
+# define BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(V) \
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename V::result_type) \
+ /**/
+
+#else // EDG-based compilers
+
+# define BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(V) \
+ typename enable_if< \
+ mpl::not_< is_const< V > > \
+ , BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename V::result_type) \
+ >::type \
+ /**/
+
+#endif // EDG-based compilers workaround
+
+template <typename Visitor, typename Visitable1, typename Visitable2>
+inline
+ BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(Visitor)
+apply_visitor(
+ Visitor& visitor
+ , Visitable1& visitable1, Visitable2& visitable2
+ )
+{
+ ::boost::detail::variant::apply_visitor_binary_unwrap<
+ Visitor, Visitable2
+ > unwrapper(visitor, visitable2);
+
+ return boost::apply_visitor(unwrapper, visitable1);
+}
+
+#undef BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE
+
+//
+// const-visitor version:
+//
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+template <typename Visitor, typename Visitable1, typename Visitable2>
+inline
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(
+ typename Visitor::result_type
+ )
+apply_visitor(
+ const Visitor& visitor
+ , Visitable1& visitable1, Visitable2& visitable2
+ )
+{
+ ::boost::detail::variant::apply_visitor_binary_unwrap<
+ const Visitor, Visitable2
+ > unwrapper(visitor, visitable2);
+
+ return boost::apply_visitor(unwrapper, visitable1);
+}
+
+#endif // MSVC7 and below exclusion
+
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_APPLY_VISITOR_BINARY_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/apply_visitor_delayed.hpp b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_delayed.hpp
new file mode 100644
index 0000000..31c79a2
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_delayed.hpp
@@ -0,0 +1,85 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/apply_visitor_delayed.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_APPLY_VISITOR_DELAYED_HPP
+#define BOOST_VARIANT_DETAIL_APPLY_VISITOR_DELAYED_HPP
+
+#include "boost/variant/detail/generic_result_type.hpp"
+
+#include "boost/variant/detail/apply_visitor_unary.hpp"
+#include "boost/variant/detail/apply_visitor_binary.hpp"
+
+namespace boost {
+
+//////////////////////////////////////////////////////////////////////////
+// function template apply_visitor(visitor)
+//
+// Returns a function object, overloaded for unary and binary usage, that
+// visits its arguments using visitor (or a copy of visitor) via
+// * apply_visitor( visitor, [argument] )
+// under unary invocation, or
+// * apply_visitor( visitor, [argument1], [argument2] )
+// under binary invocation.
+//
+// NOTE: Unlike other apply_visitor forms, the visitor object must be
+// non-const; this prevents user from giving temporary, to disastrous
+// effect (i.e., returned function object would have dead reference).
+//
+
+template <typename Visitor>
+class apply_visitor_delayed_t
+{
+public: // visitor typedefs
+
+ typedef typename Visitor::result_type
+ result_type;
+
+private: // representation
+
+ Visitor& visitor_;
+
+public: // structors
+
+ explicit apply_visitor_delayed_t(Visitor& visitor)
+ : visitor_(visitor)
+ {
+ }
+
+public: // unary visitor interface
+
+ template <typename Visitable>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ operator()(Visitable& visitable)
+ {
+ return apply_visitor(visitor_, visitable);
+ }
+
+public: // binary visitor interface
+
+ template <typename Visitable1, typename Visitable2>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ operator()(Visitable1& visitable1, Visitable2& visitable2)
+ {
+ return apply_visitor(visitor_, visitable1, visitable2);
+ }
+
+};
+
+template <typename Visitor>
+inline apply_visitor_delayed_t<Visitor> apply_visitor(Visitor& visitor)
+{
+ return apply_visitor_delayed_t<Visitor>(visitor);
+}
+
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_APPLY_VISITOR_DELAYED_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/apply_visitor_unary.hpp b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_unary.hpp
new file mode 100644
index 0000000..10b361a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/apply_visitor_unary.hpp
@@ -0,0 +1,79 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/apply_visitor_unary.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_APPLY_VISITOR_UNARY_HPP
+#define BOOST_VARIANT_DETAIL_APPLY_VISITOR_UNARY_HPP
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+#include "boost/variant/detail/generic_result_type.hpp"
+
+#include "boost/utility/enable_if.hpp"
+
+namespace boost {
+
+//////////////////////////////////////////////////////////////////////////
+// function template apply_visitor(visitor, visitable)
+//
+// Visits visitable with visitor.
+//
+
+//
+// nonconst-visitor version:
+//
+
+#if !BOOST_WORKAROUND(__EDG__, BOOST_TESTED_AT(302))
+
+# define BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(V) \
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename V::result_type) \
+ /**/
+
+#else // EDG-based compilers
+
+# define BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(V) \
+ typename enable_if< \
+ mpl::not_< is_const< V > > \
+ , BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename V::result_type) \
+ >::type \
+ /**/
+
+#endif // EDG-based compilers workaround
+
+template <typename Visitor, typename Visitable>
+inline
+ BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(Visitor)
+apply_visitor(Visitor& visitor, Visitable& visitable)
+{
+ return visitable.apply_visitor(visitor);
+}
+
+#undef BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE
+
+//
+// const-visitor version:
+//
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+template <typename Visitor, typename Visitable>
+inline
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
+apply_visitor(const Visitor& visitor, Visitable& visitable)
+{
+ return visitable.apply_visitor(visitor);
+}
+
+#endif // MSVC7 and below exclusion
+
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_APPLY_VISITOR_UNARY_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/backup_holder.hpp b/3rdParty/Boost/src/boost/variant/detail/backup_holder.hpp
new file mode 100644
index 0000000..ed112b8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/backup_holder.hpp
@@ -0,0 +1,94 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/backup_holder.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP
+#define BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP
+
+#include "boost/assert.hpp"
+
+namespace boost {
+namespace detail { namespace variant {
+
+template <typename T>
+class backup_holder
+{
+private: // representation
+
+ T* backup_;
+
+public: // structors
+
+ ~backup_holder()
+ {
+ delete backup_;
+ }
+
+ explicit backup_holder(T* backup)
+ : backup_(backup)
+ {
+ }
+
+ backup_holder(const backup_holder&);
+
+public: // modifiers
+
+ backup_holder& operator=(const backup_holder& rhs)
+ {
+ *backup_ = rhs.get();
+ return *this;
+ }
+
+ backup_holder& operator=(const T& rhs)
+ {
+ *backup_ = rhs;
+ return *this;
+ }
+
+ void swap(backup_holder& rhs)
+ {
+ T* tmp = rhs.backup_;
+ rhs.backup_ = this->backup_;
+ this->backup_ = tmp;
+ }
+
+public: // queries
+
+ T& get()
+ {
+ return *backup_;
+ }
+
+ const T& get() const
+ {
+ return *backup_;
+ }
+
+};
+
+template <typename T>
+backup_holder<T>::backup_holder(const backup_holder&)
+ : backup_(0)
+{
+ // not intended for copy, but do not want to prohibit syntactically
+ BOOST_ASSERT(false);
+}
+
+template <typename T>
+void swap(backup_holder<T>& lhs, backup_holder<T>& rhs)
+{
+ lhs.swap(rhs);
+}
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/bool_trait_def.hpp b/3rdParty/Boost/src/boost/variant/detail/bool_trait_def.hpp
new file mode 100644
index 0000000..823a79a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/bool_trait_def.hpp
@@ -0,0 +1,30 @@
+//-----------------------------------------------------------------------------
+// boost/variant/detail/bool_trait_def.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// 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)
+
+// Needed until move-related traits incorporated into type_traits library.
+// no include guards, the header is intended for multiple inclusion!
+
+// should be the last #include
+#include "boost/type_traits/detail/bool_trait_def.hpp"
+
+#define BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(trait,T,C) \
+template< typename T > struct trait \
+ BOOST_TT_AUX_BOOL_C_BASE(C) \
+{ \
+ BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(C) \
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,trait,(T)) \
+}; \
+/**/
+
+#define BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(arity, name) \
+BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(arity, name) \
+/**/
diff --git a/3rdParty/Boost/src/boost/variant/detail/bool_trait_undef.hpp b/3rdParty/Boost/src/boost/variant/detail/bool_trait_undef.hpp
new file mode 100644
index 0000000..9b8fb54
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/bool_trait_undef.hpp
@@ -0,0 +1,21 @@
+//-----------------------------------------------------------------------------
+// boost/variant/detail/bool_trait_undef.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// 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)
+
+// Needed until move-related traits incorporated into type_traits library.
+// no include guards, the header is intended for multiple inclusion!
+
+// should be the last #include
+#include "boost/type_traits/detail/bool_trait_undef.hpp"
+
+
+#undef BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1
+#undef BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX
diff --git a/3rdParty/Boost/src/boost/variant/detail/cast_storage.hpp b/3rdParty/Boost/src/boost/variant/detail/cast_storage.hpp
new file mode 100644
index 0000000..f23f174
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/cast_storage.hpp
@@ -0,0 +1,48 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/cast_storage.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_CAST_STORAGE_HPP
+#define BOOST_VARIANT_DETAIL_CAST_STORAGE_HPP
+
+#include "boost/config.hpp"
+
+namespace boost {
+namespace detail { namespace variant {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) function template cast_storage
+//
+// Casts the given storage to the specified type, but with qualification.
+//
+
+template <typename T>
+inline T& cast_storage(
+ void* storage
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)
+ )
+{
+ return *static_cast<T*>(storage);
+}
+
+template <typename T>
+inline const T& cast_storage(
+ const void* storage
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(T)
+ )
+{
+ return *static_cast<const T*>(storage);
+}
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_CAST_STORAGE_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/config.hpp b/3rdParty/Boost/src/boost/variant/detail/config.hpp
new file mode 100644
index 0000000..eb18201
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/config.hpp
@@ -0,0 +1,38 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/config.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_CONFIG_HPP
+#define BOOST_VARIANT_DETAIL_CONFIG_HPP
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING
+//
+#if BOOST_WORKAROUND(__MWERKS__, <= 0x3201) \
+ || BOOST_WORKAROUND(BOOST_INTEL, <= 700) \
+ || BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
+ && !defined(BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING)
+# define BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND
+//
+#if !defined(BOOST_NO_SFINAE) \
+ && !BOOST_WORKAROUND(BOOST_INTEL, <= 700) \
+ && !defined(BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND)
+# define BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND
+#endif
+
+#endif // BOOST_VARIANT_DETAIL_CONFIG_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/enable_recursive.hpp b/3rdParty/Boost/src/boost/variant/detail/enable_recursive.hpp
new file mode 100644
index 0000000..76bd7c7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/enable_recursive.hpp
@@ -0,0 +1,162 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/enable_recursive.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_HPP
+#define BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_HPP
+
+#include "boost/variant/detail/enable_recursive_fwd.hpp"
+#include "boost/variant/variant_fwd.hpp"
+
+#if !defined(BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT)
+# include "boost/mpl/apply.hpp"
+# include "boost/mpl/eval_if.hpp"
+# include "boost/mpl/lambda.hpp"
+#endif
+
+#include "boost/variant/detail/substitute.hpp"
+#include "boost/mpl/aux_/config/ctps.hpp"
+#include "boost/mpl/bool_fwd.hpp"
+#include "boost/mpl/if.hpp"
+#include "boost/mpl/or.hpp"
+#include "boost/type_traits/is_pointer.hpp"
+#include "boost/type_traits/is_reference.hpp"
+#include "boost/type_traits/is_same.hpp"
+
+#include "boost/variant/recursive_wrapper.hpp"
+
+namespace boost {
+namespace detail { namespace variant {
+
+#if !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+
+# define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL(T,Dest,Source) \
+ substitute< T , Dest , Source > \
+ /**/
+
+#else // defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class template rebind1
+//
+// Limited workaround in case 'substitute' metafunction unavailable.
+//
+
+template <typename T, typename U1>
+struct rebind1
+{
+private:
+ typedef typename mpl::lambda<
+ mpl::identity<T>
+ >::type le_;
+
+public:
+ typedef typename mpl::eval_if<
+ is_same< le_, mpl::identity<T> >
+ , le_ // identity<T>
+ , mpl::apply1<le_, U1>
+ >::type type;
+};
+
+# define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL(T,Dest,Source) \
+ rebind1< T , Dest > \
+ /**/
+
+#endif // !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction enable_recursive
+//
+// See boost/variant/detail/enable_recursive_fwd.hpp for more information.
+//
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T, typename RecursiveVariant, typename NoWrapper>
+struct enable_recursive
+ : BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL(
+ T, RecursiveVariant, ::boost::recursive_variant_
+ )
+{
+};
+
+template <typename T, typename RecursiveVariant>
+struct enable_recursive< T,RecursiveVariant,mpl::false_ >
+{
+private: // helpers, for metafunction result (below)
+
+ typedef typename BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL(
+ T, RecursiveVariant, ::boost::recursive_variant_
+ )::type t_;
+
+public: // metafunction result
+
+ // [Wrap with recursive_wrapper only if rebind really changed something:]
+ typedef typename mpl::if_<
+ mpl::or_<
+ is_same< t_,T >
+ , is_reference<t_>
+ , is_pointer<t_>
+ >
+ , t_
+ , boost::recursive_wrapper<t_>
+ >::type type;
+
+};
+
+#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T, typename RecursiveVariant, typename NoWrapper>
+struct enable_recursive
+{
+private: // helpers, for metafunction result (below)
+
+ typedef typename BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL(
+ T, RecursiveVariant, ::boost::recursive_variant_
+ )::type t_;
+
+public: // metafunction result
+
+ // [Wrap with recursive_wrapper only if rebind really changed something:]
+ typedef typename mpl::if_<
+ mpl::or_<
+ NoWrapper
+ , is_same< t_,T >
+ , is_reference<t_>
+ , is_pointer<t_>
+ >
+ , t_
+ , boost::recursive_wrapper<t_>
+ >::type type;
+
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction class quoted_enable_recursive
+//
+// Same behavior as enable_recursive metafunction (see above).
+//
+template <typename RecursiveVariant, typename NoWrapper>
+struct quoted_enable_recursive
+{
+ template <typename T>
+ struct apply
+ : enable_recursive<T, RecursiveVariant, NoWrapper>
+ {
+ };
+};
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/enable_recursive_fwd.hpp b/3rdParty/Boost/src/boost/variant/detail/enable_recursive_fwd.hpp
new file mode 100644
index 0000000..3336c1f
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/enable_recursive_fwd.hpp
@@ -0,0 +1,116 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/enable_recursive_fwd.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_FWD_HPP
+#define BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_FWD_HPP
+
+#include "boost/mpl/aux_/config/ctps.hpp"
+
+#include "boost/mpl/bool_fwd.hpp"
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include "boost/mpl/bool.hpp"
+#else
+# include "boost/type_traits/is_base_and_derived.hpp"
+#endif
+
+namespace boost {
+namespace detail { namespace variant {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) tag recursive_flag
+//
+// Signifies that the variant should perform recursive substituion.
+//
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T>
+struct recursive_flag
+{
+ typedef T type;
+};
+
+#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+struct recursive_flag_tag
+{
+};
+
+template <typename T>
+struct recursive_flag
+ : recursive_flag_tag
+{
+ typedef T type;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction is_recursive_flag
+//
+// Signifies that the variant should perform recursive substituion.
+//
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T>
+struct is_recursive_flag
+ : mpl::false_
+{
+};
+
+template <typename T>
+struct is_recursive_flag< recursive_flag<T> >
+ : mpl::true_
+{
+};
+
+#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T>
+struct is_recursive_flag
+ : is_base_and_derived< recursive_flag_tag,T >
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction enable_recursive
+//
+// Attempts recursive_variant_ tag substitution, wrapping with
+// boost::recursive_wrapper if substituion occurs w/ non-indirect result
+// (i.e., not a reference or pointer) *and* NoWrapper is false_.
+//
+template <
+ typename T
+ , typename RecursiveVariant
+ , typename NoWrapper = mpl::false_
+ >
+struct enable_recursive;
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction class quoted_enable_recursive
+//
+// Same behavior as enable_recursive metafunction (see above).
+//
+template <
+ typename RecursiveVariant
+ , typename NoWrapper = mpl::false_
+ >
+struct quoted_enable_recursive;
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_FWD_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/forced_return.hpp b/3rdParty/Boost/src/boost/variant/detail/forced_return.hpp
new file mode 100644
index 0000000..cc1f25b
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/forced_return.hpp
@@ -0,0 +1,104 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/forced_return.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP
+#define BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP
+
+#include "boost/config.hpp"
+#include "boost/variant/detail/generic_result_type.hpp"
+#include "boost/assert.hpp"
+
+#if !defined(BOOST_MSVC) && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include "boost/type_traits/remove_reference.hpp"
+#endif
+
+namespace boost {
+namespace detail { namespace variant {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) function template forced_return
+//
+// Logical error to permit invocation at runtime, but (artificially) satisfies
+// compile-time requirement of returning a result value.
+//
+
+#if !defined(BOOST_MSVC) \
+ && !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_NO_VOID_RETURNS)
+
+// "standard" implementation:
+
+template <typename T>
+inline T forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) )
+{
+ // logical error: should never be here! (see above)
+ BOOST_ASSERT(false);
+
+ typedef typename boost::remove_reference<T>::type basic_type;
+ basic_type* dummy = 0;
+ return *static_cast< basic_type* >(dummy);
+}
+
+template <>
+inline void forced_return<void>( BOOST_EXPLICIT_TEMPLATE_TYPE_SPEC(void) )
+{
+ // logical error: should never be here! (see above)
+ BOOST_ASSERT(false);
+}
+
+#elif !defined(BOOST_MSVC)
+
+// workaround implementation
+//
+// TODO: Determine the most efficient way to handle this -- as below? by
+// throwing? by recursive call to forced_return itself? etc.
+//
+
+template <typename T>
+inline
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T)
+forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) )
+{
+ // logical error: should never be here! (see above)
+ BOOST_ASSERT(false);
+
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) (*dummy)() = 0;
+ return dummy();
+}
+
+#else // defined(BOOST_MSVC)
+
+// msvc-specific implementation
+//
+// Leverages __declspec(noreturn) for optimized implementation.
+//
+
+__declspec(noreturn)
+inline void forced_return_no_return() {};
+
+template <typename T>
+inline
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T)
+forced_return( BOOST_EXPLICIT_TEMPLATE_TYPE(T) )
+{
+ // logical error: should never be here! (see above)
+ BOOST_ASSERT(false);
+
+ forced_return_no_return();
+}
+
+#endif // BOOST_MSVC optimization
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/generic_result_type.hpp b/3rdParty/Boost/src/boost/variant/detail/generic_result_type.hpp
new file mode 100644
index 0000000..b3fbb19
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/generic_result_type.hpp
@@ -0,0 +1,88 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/generic_result_type.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
+#define BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
+
+#include "boost/config.hpp"
+
+//////////////////////////////////////////////////////////////////////////
+// (workaround) macro BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE
+//
+// On compilers with BOOST_NO_VOID_RETURNS, this macro provides a route
+// to a single syntax for dealing with template functions that may (but
+// not necessarily) return nothing (i.e. void).
+//
+// BOOST_VARIANT_AUX_RETURN_VOID provided for compilers w/ (erroneous?)
+// warnings about non-void functions not returning a value.
+//
+
+#if !defined(BOOST_NO_VOID_RETURNS)
+
+#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \
+ T \
+ /**/
+
+#define BOOST_VARIANT_AUX_RETURN_VOID \
+ /**/
+
+#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE \
+ void \
+ /**/
+
+#else // defined(BOOST_NO_VOID_RETURNS)
+
+namespace boost {
+namespace detail { namespace variant {
+
+struct fake_return_void
+{
+ fake_return_void()
+ {
+ }
+
+ template <typename T>
+ fake_return_void(const T&)
+ {
+ }
+};
+
+template <typename T>
+struct no_void_returns_helper
+{
+ typedef T type;
+};
+
+template <>
+struct no_void_returns_helper<void>
+{
+ typedef fake_return_void type;
+};
+
+}} // namespace detail::variant
+} // namespace boost
+
+#define BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) \
+ BOOST_DEDUCED_TYPENAME \
+ ::boost::detail::variant::no_void_returns_helper< T >::type \
+ /**/
+
+#define BOOST_VARIANT_AUX_RETURN_VOID \
+ return ::boost::detail::variant::fake_return_void() \
+ /**/
+
+#define BOOST_VARIANT_AUX_RETURN_VOID_TYPE \
+ ::boost::detail::variant::fake_return_void
+
+#endif // BOOST_NO_VOID_RETURNS workaround
+
+#endif // BOOST_VARIANT_DETAIL_GENERIC_RESULT_TYPE_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/has_nothrow_move.hpp b/3rdParty/Boost/src/boost/variant/detail/has_nothrow_move.hpp
new file mode 100644
index 0000000..51ca095
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/has_nothrow_move.hpp
@@ -0,0 +1,106 @@
+
+// (C) Copyright Eric Friedman 2002-2003.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org for most recent version including documentation.
+
+#ifndef BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED
+#define BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED
+
+#include "boost/config.hpp" // for STATIC_CONSTANT
+#include "boost/variant/detail/has_trivial_move.hpp"
+#include "boost/type_traits/has_nothrow_copy.hpp"
+#include "boost/type_traits/has_nothrow_assign.hpp"
+
+#include "boost/mpl/and.hpp"
+#include "boost/mpl/or.hpp"
+
+// should be the last #include
+#include "boost/variant/detail/bool_trait_def.hpp"
+
+namespace boost {
+namespace detail { namespace variant {
+
+// TRAIT: has_nothrow_move
+
+template <typename T>
+struct has_nothrow_move_impl
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ ::boost::mpl::or_<
+ has_trivial_move<T>
+ , ::boost::mpl::and_<
+ has_nothrow_copy<T>
+ , has_nothrow_assign<T>
+ >
+ >::type::value
+ )
+ );
+};
+
+BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
+ has_nothrow_move
+ , T
+ , (::boost::detail::variant::has_nothrow_move_impl<T>::value)
+ )
+
+
+// TRAIT: has_nothrow_move_constructor
+
+template <typename T>
+struct has_nothrow_move_constructor_impl
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ ::boost::mpl::or_<
+ has_nothrow_move<T>
+ , has_trivial_move_constructor<T>
+ , has_nothrow_copy<T>
+ >::type::value
+ )
+ );
+};
+
+BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
+ has_nothrow_move_constructor
+ , T
+ , (::boost::detail::variant::has_nothrow_move_constructor_impl<T>::value)
+ )
+
+
+// TRAIT: has_nothrow_move_assign
+
+template <typename T>
+struct has_nothrow_move_assign_impl
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ ::boost::mpl::or_<
+ has_nothrow_move<T>
+ , has_trivial_move_assign<T>
+ , has_nothrow_assign<T>
+ >::type::value
+ )
+ );
+};
+
+BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
+ has_nothrow_move_assign
+ , T
+ , (::boost::detail::variant::has_nothrow_move_assign_impl<T>::value)
+ )
+
+}} // namespace detail::variant
+
+BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move)
+BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move_constructor)
+BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_nothrow_move_assign)
+
+} // namespace boost
+
+#include "boost/variant/detail/bool_trait_undef.hpp"
+
+#endif // BOOST_VARIANT_DETAIL_HAS_NOTHROW_MOVE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/variant/detail/has_trivial_move.hpp b/3rdParty/Boost/src/boost/variant/detail/has_trivial_move.hpp
new file mode 100644
index 0000000..5293366
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/has_trivial_move.hpp
@@ -0,0 +1,100 @@
+
+// (C) Copyright Eric Friedman 2002-2003.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// See http://www.boost.org for most recent version including documentation.
+
+#ifndef BOOST_VARIANT_DETAIL_HAS_TRIVIAL_MOVE_HPP_INCLUDED
+#define BOOST_VARIANT_DETAIL_HAS_TRIVIAL_MOVE_HPP_INCLUDED
+
+#include "boost/config.hpp" // for STATIC_CONSTANT
+#include "boost/type_traits/has_trivial_copy.hpp"
+#include "boost/type_traits/has_trivial_assign.hpp"
+
+#include "boost/mpl/and.hpp"
+#include "boost/mpl/or.hpp"
+
+// should be the last #include
+#include "boost/variant/detail/bool_trait_def.hpp"
+
+namespace boost {
+namespace detail { namespace variant {
+
+// TRAIT: has_trivial_move
+
+template <typename T>
+struct has_trivial_move_impl
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ ::boost::mpl::and_<
+ has_trivial_copy<T>
+ , has_trivial_assign<T>
+ >::type::value
+ )
+ );
+};
+
+BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
+ has_trivial_move
+ , T
+ , (::boost::detail::variant::has_trivial_move_impl<T>::value)
+ )
+
+
+// TRAIT: has_trivial_move_constructor
+
+template <typename T>
+struct has_trivial_move_constructor_impl
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ ::boost::mpl::or_<
+ has_trivial_move<T>
+ , has_trivial_copy<T>
+ >::type::value
+ )
+ );
+};
+
+BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
+ has_trivial_move_constructor
+ , T
+ , (::boost::detail::variant::has_trivial_move_constructor_impl<T>::value)
+ )
+
+
+// TRAIT: has_trivial_move_assign
+
+template <typename T>
+struct has_trivial_move_assign_impl
+{
+ BOOST_STATIC_CONSTANT(
+ bool, value = (
+ ::boost::mpl::or_<
+ has_trivial_move<T>
+ , has_trivial_assign<T>
+ >::type::value
+ )
+ );
+};
+
+BOOST_VARIANT_TT_AUX_BOOL_TRAIT_DEF1(
+ has_trivial_move_assign
+ , T
+ , (::boost::detail::variant::has_trivial_move_assign_impl<T>::value)
+ )
+
+}} // namespace detail::variant
+
+BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_trivial_move)
+BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_trivial_move_constructor)
+BOOST_VARIANT_TT_AUX_TRAIT_SUFFIX(1,::boost::detail::variant::has_trivial_move_assign)
+
+} // namespace boost
+
+#include "boost/variant/detail/bool_trait_undef.hpp"
+
+#endif // BOOST_VARIANT_DETAIL_HAS_TRIVIAL_MOVE_HPP_INCLUDED
diff --git a/3rdParty/Boost/src/boost/variant/detail/initializer.hpp b/3rdParty/Boost/src/boost/variant/detail/initializer.hpp
new file mode 100644
index 0000000..b14d6c8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/initializer.hpp
@@ -0,0 +1,265 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/initializer.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_INITIALIZER_HPP
+#define BOOST_VARIANT_DETAIL_INITIALIZER_HPP
+
+#include <new> // for placement new
+
+#include "boost/config.hpp"
+
+#include "boost/call_traits.hpp"
+#include "boost/detail/reference_content.hpp"
+#include "boost/variant/recursive_wrapper_fwd.hpp"
+
+#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
+# include "boost/mpl/aux_/value_wknd.hpp"
+# include "boost/mpl/int.hpp"
+# include "boost/mpl/iter_fold.hpp"
+# include "boost/mpl/next.hpp"
+# include "boost/mpl/deref.hpp"
+# include "boost/mpl/pair.hpp"
+# include "boost/mpl/protect.hpp"
+#else
+# include "boost/variant/variant_fwd.hpp"
+# include "boost/preprocessor/cat.hpp"
+# include "boost/preprocessor/enum.hpp"
+# include "boost/preprocessor/repeat.hpp"
+#endif
+
+namespace boost {
+namespace detail { namespace variant {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) support to simulate standard overload resolution rules
+//
+// The below initializers allows variant to follow standard overload
+// resolution rules over the specified set of bounded types.
+//
+// On compilers where using declarations in class templates can correctly
+// avoid name hiding, use an optimal solution based on the variant's typelist.
+//
+// Otherwise, use a preprocessor workaround based on knowledge of the fixed
+// size of the variant's psuedo-variadic template parameter list.
+//
+
+#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
+
+// (detail) quoted metafunction make_initializer_node
+//
+// Exposes a pair whose first type is a node in the initializer hierarchy.
+//
+struct make_initializer_node
+{
+ template <typename BaseIndexPair, typename Iterator>
+ struct apply
+ {
+ private: // helpers, for metafunction result (below)
+
+ typedef typename BaseIndexPair::first
+ base;
+ typedef typename BaseIndexPair::second
+ index;
+
+ class initializer_node
+ : public base
+ {
+ private: // helpers, for static functions (below)
+
+ typedef typename mpl::deref<Iterator>::type
+ recursive_enabled_T;
+ typedef typename unwrap_recursive<recursive_enabled_T>::type
+ public_T;
+ typedef typename call_traits<public_T>::param_type
+ param_T;
+
+ public: // static functions
+
+ using base::initialize;
+
+ static int initialize(void* dest, param_T operand)
+ {
+ typedef typename boost::detail::make_reference_content<
+ recursive_enabled_T
+ >::type internal_T;
+
+ new(dest) internal_T(operand);
+ return BOOST_MPL_AUX_VALUE_WKND(index)::value; // which
+ }
+
+ };
+
+ friend class initializer_node;
+
+ public: // metafunction result
+
+ typedef mpl::pair<
+ initializer_node
+ , typename mpl::next< index >::type
+ > type;
+
+ };
+};
+
+// (detail) class initializer_root
+//
+// Every level of the initializer hierarchy must expose the name
+// "initialize," so initializer_root provides a dummy function:
+//
+class initializer_root
+{
+public: // static functions
+
+ static void initialize();
+
+};
+
+#else // defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+ #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_PARAMS \
+ BOOST_VARIANT_ENUM_PARAMS(typename recursive_enabled_T) \
+ /**/
+
+ #define BOOST_VARIANT_AUX_PP_INITIALIZER_DEFINE_PARAM_T(N) \
+ typedef typename unwrap_recursive< \
+ BOOST_PP_CAT(recursive_enabled_T,N) \
+ >::type BOOST_PP_CAT(public_T,N); \
+ typedef typename call_traits< \
+ BOOST_PP_CAT(public_T,N) \
+ >::param_type BOOST_PP_CAT(param_T,N); \
+ /**/
+
+# else // MSVC7 and below
+
+ #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_PARAMS \
+ BOOST_VARIANT_ENUM_PARAMS(typename recursive_enabled_T) \
+ , BOOST_VARIANT_ENUM_PARAMS(typename param_T) \
+ /**/
+
+ #define BOOST_VARIANT_AUX_PP_INITIALIZER_DEFINE_PARAM_T(N) \
+ /**/
+
+# endif // MSVC7 and below workaround
+
+template < BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_PARAMS >
+struct preprocessor_list_initializer
+{
+public: // static functions
+
+ #define BOOST_VARIANT_AUX_PP_INITIALIZE_FUNCTION(z,N,_) \
+ BOOST_VARIANT_AUX_PP_INITIALIZER_DEFINE_PARAM_T(N) \
+ static int initialize( \
+ void* dest \
+ , BOOST_PP_CAT(param_T,N) operand \
+ ) \
+ { \
+ typedef typename boost::detail::make_reference_content< \
+ BOOST_PP_CAT(recursive_enabled_T,N) \
+ >::type internal_T; \
+ \
+ new(dest) internal_T(operand); \
+ return (N); /*which*/ \
+ } \
+ /**/
+
+ BOOST_PP_REPEAT(
+ BOOST_VARIANT_LIMIT_TYPES
+ , BOOST_VARIANT_AUX_PP_INITIALIZE_FUNCTION
+ , _
+ )
+
+ #undef BOOST_VARIANT_AUX_PP_INITIALIZE_FUNCTION
+
+};
+
+# if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+
+#if !defined(BOOST_VARIANT_AUX_ECHO)
+# define BOOST_VARIANT_AUX_ECHO(z,N,token) token
+#endif
+
+template <>
+struct preprocessor_list_initializer<
+ BOOST_PP_ENUM(BOOST_VARIANT_LIMIT_TYPES, BOOST_VARIANT_AUX_ECHO, int)
+ , BOOST_PP_ENUM(BOOST_VARIANT_LIMIT_TYPES, BOOST_VARIANT_AUX_ECHO, const int)
+ >
+{
+};
+
+# endif // BOOST_MPL_CFG_MSVC_60_ETI_BUG workaround
+
+#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround
+
+}} // namespace detail::variant
+} // namespace boost
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_AUX_INITIALIZER_T
+//
+// Given both the variant's typelist and a basename for forming the list of
+// bounded types (i.e., T becomes T1, T2, etc.), exposes the initializer
+// most appropriate to the current compiler.
+//
+
+#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
+
+#define BOOST_VARIANT_AUX_INITIALIZER_T( mpl_seq, typename_base ) \
+ ::boost::mpl::iter_fold< \
+ mpl_seq \
+ , ::boost::mpl::pair< \
+ ::boost::detail::variant::initializer_root \
+ , ::boost::mpl::int_<0> \
+ > \
+ , ::boost::mpl::protect< \
+ ::boost::detail::variant::make_initializer_node \
+ > \
+ >::type::first \
+ /**/
+
+#else // defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
+
+# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+ #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_ARGS(typename_base) \
+ BOOST_VARIANT_ENUM_PARAMS(typename_base) \
+ /**/
+
+# else // MSVC7 and below
+
+ #define BOOST_VARIANT_AUX_PP_INITIALIZER_ENUM_PARAM_TYPE(z,N,T) \
+ ::boost::call_traits< \
+ ::boost::unwrap_recursive<BOOST_PP_CAT(T,N)>::type \
+ >::param_type \
+ /**/
+
+ #define BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_ARGS(typename_base) \
+ BOOST_VARIANT_ENUM_PARAMS(typename_base) \
+ , BOOST_PP_ENUM( \
+ BOOST_VARIANT_LIMIT_TYPES \
+ , BOOST_VARIANT_AUX_PP_INITIALIZER_ENUM_PARAM_TYPE \
+ , typename_base \
+ ) \
+ /**/
+
+# endif // MSVC7 workaround
+
+#define BOOST_VARIANT_AUX_INITIALIZER_T( mpl_seq, typename_base ) \
+ ::boost::detail::variant::preprocessor_list_initializer< \
+ BOOST_VARIANT_AUX_PP_INITIALIZER_TEMPLATE_ARGS(typename_base) \
+ > \
+ /**/
+
+#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround
+
+#endif // BOOST_VARIANT_DETAIL_INITIALIZER_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/make_variant_list.hpp b/3rdParty/Boost/src/boost/variant/detail/make_variant_list.hpp
new file mode 100644
index 0000000..b2c74ad
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/make_variant_list.hpp
@@ -0,0 +1,60 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/make_variant_list.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_MAKE_VARIANT_LIST_HPP
+#define BOOST_VARIANT_DETAIL_MAKE_VARIANT_LIST_HPP
+
+#include "boost/variant/variant_fwd.hpp"
+
+#include "boost/mpl/list.hpp"
+#include "boost/preprocessor/cat.hpp"
+#include "boost/preprocessor/enum.hpp"
+
+namespace boost {
+namespace detail { namespace variant {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction make_variant_list
+//
+// Provides a MPL-compatible sequence with the specified non-void types
+// as arguments.
+//
+// Rationale: see class template convert_void (variant_fwd.hpp) and using-
+// declaration workaround (below).
+//
+template < BOOST_VARIANT_ENUM_PARAMS(typename T) >
+struct make_variant_list
+{
+public: // metafunction result
+
+ // [Define a macro to convert any void(NN) tags to mpl::void...]
+# define BOOST_VARIANT_AUX_CONVERT_VOID(z, N,_) \
+ typename convert_void< BOOST_PP_CAT(T,N) >::type
+
+ // [...so that the specified types can be passed to mpl::list...]
+ typedef typename mpl::list<
+ BOOST_PP_ENUM(
+ BOOST_VARIANT_LIMIT_TYPES
+ , BOOST_VARIANT_AUX_CONVERT_VOID
+ , _
+ )
+ >::type type;
+
+ // [...and, finally, the conversion macro can be undefined:]
+# undef BOOST_VARIANT_AUX_CONVERT_VOID
+
+};
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_MAKE_VARIANT_LIST_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/move.hpp b/3rdParty/Boost/src/boost/variant/detail/move.hpp
new file mode 100644
index 0000000..572cfbb
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/move.hpp
@@ -0,0 +1,166 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/move.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003 Eric Friedman
+// Copyright (c) 2002 by Andrei Alexandrescu
+//
+// Use, modification and distribution are subject to the
+// Boost Software License, Version 1.0. (See accompanying file
+// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// This file derivative of MoJO. Much thanks to Andrei for his initial work.
+// See <http://www.cuj.com/experts/2102/alexandr.htm> for information on MOJO.
+// Re-issued here under the Boost Software License, with permission of the original
+// author (Andrei Alexandrescu).
+
+
+#ifndef BOOST_VARIANT_DETAIL_MOVE_HPP
+#define BOOST_VARIANT_DETAIL_MOVE_HPP
+
+#include <iterator> // for iterator_traits
+#include <new> // for placement new
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+#include "boost/mpl/if.hpp"
+#include "boost/type_traits/is_base_and_derived.hpp"
+
+namespace boost {
+namespace detail { namespace variant {
+
+//////////////////////////////////////////////////////////////////////////
+// forward declares
+//
+// NOTE: Incomplete until (if?) Boost.Move becomes part of Boost.
+//
+template <typename Deriving> class moveable;
+template <typename T> class move_source;
+template <typename T> class move_return;
+
+namespace detail {
+
+// (detail) moveable_tag
+//
+// Concrete type from which moveable<T> derives.
+//
+// TODO: Move into moveable_fwd.hpp and define has_move_constructor.
+//
+template <typename Deriving>
+struct moveable_tag
+{
+};
+
+} // namespace detail
+
+//////////////////////////////////////////////////////////////////////////
+// function template move
+//
+// Takes a T& and returns, if T derives moveable<T>, a move_source<T> for
+// the object; else, returns the T&.
+//
+
+namespace detail {
+
+// (detail) class template move_type
+//
+// Metafunction that, given moveable T, provides move_source<T>, else T&.
+//
+template <typename T>
+struct move_type
+{
+public: // metafunction result
+
+ typedef typename mpl::if_<
+ is_base_and_derived<detail::moveable_tag<T>, T>
+ , move_source<T>
+ , T&
+ >::type type;
+
+};
+
+} // namespace detail
+
+template <typename T>
+inline
+ typename detail::move_type<T>::type
+move(T& source)
+{
+ typedef typename detail::move_type<T>::type
+ move_t;
+
+ return move_t(source);
+}
+
+//////////////////////////////////////////////////////////////////////////
+// class template return_t
+//
+// Metafunction that, given moveable T, provides move_return<T>, else T.
+//
+template <typename T>
+struct return_t
+{
+public: // metafunction result
+
+ typedef typename mpl::if_<
+ is_base_and_derived<moveable<T>, T>
+ , move_return<T>
+ , T
+ >::type type;
+
+};
+
+//////////////////////////////////////////////////////////////////////////
+// function template move_swap
+//
+// Swaps using Koenig lookup but falls back to move-swap for primitive
+// types and on non-conforming compilers.
+//
+
+#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) \
+ || BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(2))
+
+// [Indicate that move_swap by overload is disabled...]
+#define BOOST_NO_MOVE_SWAP_BY_OVERLOAD
+
+// [...and provide straight swap-by-move implementation:]
+template <typename T>
+inline void move_swap(T& lhs, T& rhs)
+{
+ T tmp( boost::detail::variant::move(lhs) );
+ lhs = boost::detail::variant::move(rhs);
+ rhs = boost::detail::variant::move(tmp);
+}
+
+#else// !workaround
+
+namespace detail { namespace move_swap {
+
+template <typename T>
+inline void swap(T& lhs, T& rhs)
+{
+ T tmp( boost::detail::variant::move(lhs) );
+ lhs = boost::detail::variant::move(rhs);
+ rhs = boost::detail::variant::move(tmp);
+}
+
+}} // namespace detail::move_swap
+
+template <typename T>
+inline void move_swap(T& lhs, T& rhs)
+{
+ using detail::move_swap::swap;
+
+ swap(lhs, rhs);
+}
+
+#endif // workaround
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_MOVE_HPP
+
+
+
diff --git a/3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp b/3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp
new file mode 100644
index 0000000..bdd69ad
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp
@@ -0,0 +1,95 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/over_sequence.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Portions Copyright (C) 2002 David Abrahams
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_OVER_SEQUENCE_HPP
+#define BOOST_VARIANT_DETAIL_OVER_SEQUENCE_HPP
+
+#include "boost/mpl/aux_/config/ctps.hpp"
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include "boost/mpl/eval_if.hpp"
+# include "boost/mpl/bool.hpp"
+# include "boost/mpl/identity.hpp"
+# include "boost/type.hpp"
+#endif
+
+
+namespace boost {
+namespace detail { namespace variant {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class over_sequence
+//
+// Wrapper used to indicate bounded types for variant are from type sequence.
+//
+template <typename Types>
+struct over_sequence
+{
+ typedef Types type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction is_over_sequence (modeled on code by David Abrahams)
+//
+// Indicates whether the specified type is of form over_sequence<...> or not.
+//
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T>
+struct is_over_sequence
+ : mpl::false_
+{
+};
+
+template <typename Types>
+struct is_over_sequence< over_sequence<Types> >
+ : mpl::true_
+{
+};
+
+#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+typedef char (&yes_over_sequence_t)[1];
+typedef char (&no_over_sequence_t)[2];
+
+no_over_sequence_t is_over_sequence_test(...);
+
+template<typename T>
+yes_over_sequence_t is_over_sequence_test(
+ type< ::boost::detail::variant::over_sequence<T> >
+ );
+
+template<typename T>
+struct is_over_sequence_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value = (
+ sizeof(is_over_sequence_test(type<T>()))
+ == sizeof(yes_over_sequence_t)
+ ));
+};
+
+template <typename T>
+struct is_over_sequence
+ : mpl::bool_<
+ ::boost::detail::variant::is_over_sequence_impl<T>::value
+ >
+{
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_OVER_SEQUENCE_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/substitute.hpp b/3rdParty/Boost/src/boost/variant/detail/substitute.hpp
new file mode 100644
index 0000000..97fe205
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/substitute.hpp
@@ -0,0 +1,231 @@
+
+#if !defined(BOOST_PP_IS_ITERATING)
+
+///// header body
+
+//-----------------------------------------------------------------------------
+// boost variant/detail/substitute.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_SUBSTITUTE_HPP
+#define BOOST_VARIANT_DETAIL_SUBSTITUTE_HPP
+
+#include "boost/mpl/aux_/config/ctps.hpp"
+
+#include "boost/variant/detail/substitute_fwd.hpp"
+#include "boost/mpl/aux_/lambda_arity_param.hpp"
+#include "boost/mpl/aux_/preprocessor/params.hpp"
+#include "boost/mpl/aux_/preprocessor/repeat.hpp"
+#include "boost/mpl/int_fwd.hpp"
+#include "boost/mpl/limits/arity.hpp"
+#include "boost/preprocessor/cat.hpp"
+#include "boost/preprocessor/empty.hpp"
+#include "boost/preprocessor/arithmetic/inc.hpp"
+#include "boost/preprocessor/iterate.hpp"
+
+namespace boost {
+namespace detail { namespace variant {
+
+#if !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction substitute
+//
+// Substitutes one type for another in the given type expression.
+//
+
+//
+// primary template
+//
+template <
+ typename T, typename Dest, typename Source
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(
+ typename Arity /* = ... (see substitute_fwd.hpp) */
+ )
+ >
+struct substitute
+{
+ typedef T type;
+};
+
+//
+// tag substitution specializations
+//
+
+#define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG(CV_) \
+ template <typename Dest, typename Source> \
+ struct substitute< \
+ CV_ Source \
+ , Dest \
+ , Source \
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<-1>) \
+ > \
+ { \
+ typedef CV_ Dest type; \
+ }; \
+ /**/
+
+BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG( BOOST_PP_EMPTY() )
+BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG(const)
+BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG(volatile)
+BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG(const volatile)
+
+#undef BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_SUBSTITUTE_TAG
+
+//
+// pointer specializations
+//
+#define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER(CV_) \
+ template <typename T, typename Dest, typename Source> \
+ struct substitute< \
+ T * CV_ \
+ , Dest \
+ , Source \
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<-1>) \
+ > \
+ { \
+ typedef typename substitute< \
+ T, Dest, Source \
+ >::type * CV_ type; \
+ }; \
+ /**/
+
+BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER( BOOST_PP_EMPTY() )
+BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER(const)
+BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER(volatile)
+BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER(const volatile)
+
+#undef BOOST_VARIANT_AUX_ENABLE_RECURSIVE_IMPL_HANDLE_POINTER
+
+//
+// reference specializations
+//
+template <typename T, typename Dest, typename Source>
+struct substitute<
+ T&
+ , Dest
+ , Source
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<-1>)
+ >
+{
+ typedef typename substitute<
+ T, Dest, Source
+ >::type & type;
+};
+
+//
+// template expression (i.e., F<...>) specializations
+//
+
+#define BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF_IMPL(N) \
+ typedef typename substitute< \
+ BOOST_PP_CAT(U,N), Dest, Source \
+ >::type BOOST_PP_CAT(u,N); \
+ /**/
+
+#define BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF(z, N, _) \
+ BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF_IMPL( BOOST_PP_INC(N) ) \
+ /**/
+
+#define BOOST_PP_ITERATION_LIMITS (0,BOOST_MPL_LIMIT_METAFUNCTION_ARITY)
+#define BOOST_PP_FILENAME_1 "boost/variant/detail/substitute.hpp"
+#include BOOST_PP_ITERATE()
+
+#undef BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF_IMPL
+#undef BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF
+
+#endif // !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_SUBSTITUTE_HPP
+
+///// iteration, depth == 1
+
+#elif BOOST_PP_ITERATION_DEPTH() == 1
+#define i BOOST_PP_FRAME_ITERATION(1)
+
+#if i > 0
+
+//
+// template specializations
+//
+template <
+ template < BOOST_MPL_PP_PARAMS(i,typename P) > class T
+ , BOOST_MPL_PP_PARAMS(i,typename U)
+ , typename Dest
+ , typename Source
+ >
+struct substitute<
+ T< BOOST_MPL_PP_PARAMS(i,U) >
+ , Dest
+ , Source
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<( i )>)
+ >
+{
+private:
+ BOOST_MPL_PP_REPEAT(i, BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF, _)
+
+public:
+ typedef T< BOOST_MPL_PP_PARAMS(i,u) > type;
+};
+
+//
+// function specializations
+//
+template <
+ typename R
+ , BOOST_MPL_PP_PARAMS(i,typename U)
+ , typename Dest
+ , typename Source
+ >
+struct substitute<
+ R (*)( BOOST_MPL_PP_PARAMS(i,U) )
+ , Dest
+ , Source
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<-1>)
+ >
+{
+private:
+ typedef typename substitute< R, Dest, Source >::type r;
+ BOOST_MPL_PP_REPEAT(i, BOOST_VARIANT_AUX_SUBSTITUTE_TYPEDEF, _)
+
+public:
+ typedef r (*type)( BOOST_MPL_PP_PARAMS(i,u) );
+};
+
+#elif i == 0
+
+//
+// zero-arg function specialization
+//
+template <
+ typename R, typename Dest, typename Source
+ >
+struct substitute<
+ R (*)( void )
+ , Dest
+ , Source
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(mpl::int_<-1>)
+ >
+{
+private:
+ typedef typename substitute< R, Dest, Source >::type r;
+
+public:
+ typedef r (*type)( void );
+};
+
+#endif // i
+
+#undef i
+#endif // BOOST_PP_IS_ITERATING
diff --git a/3rdParty/Boost/src/boost/variant/detail/substitute_fwd.hpp b/3rdParty/Boost/src/boost/variant/detail/substitute_fwd.hpp
new file mode 100644
index 0000000..1723847
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/substitute_fwd.hpp
@@ -0,0 +1,59 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/substitute_fwd.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_SUBSTITUTE_FWD_HPP
+#define BOOST_VARIANT_DETAIL_SUBSTITUTE_FWD_HPP
+
+#include "boost/mpl/aux_/lambda_arity_param.hpp"
+#include "boost/mpl/aux_/template_arity.hpp"
+#include "boost/mpl/int_fwd.hpp"
+
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_VARIANT_DETAIL_NO_SUBSTITUTE
+//
+// Defined if 'substitute' is not implementable on the current compiler.
+//
+
+#include "boost/mpl/aux_/config/ctps.hpp"
+#include "boost/mpl/aux_/config/ttp.hpp"
+
+#if defined(BOOST_NO_TEMPLATE_TEMPLATE_PARAMETERS) \
+ || defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
+ && !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+# define BOOST_VARIANT_DETAIL_NO_SUBSTITUTE
+#endif
+
+namespace boost {
+namespace detail { namespace variant {
+
+#if !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+
+///////////////////////////////////////////////////////////////////////////////
+// metafunction substitute
+//
+// Substitutes one type for another in the given type expression.
+//
+template <
+ typename T, typename Dest, typename Source
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(
+ typename Arity = mpl::int_< mpl::aux::template_arity<T>::value >
+ )
+ >
+struct substitute;
+
+#endif // !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_SUBSTITUTE_FWD_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/variant_io.hpp b/3rdParty/Boost/src/boost/variant/detail/variant_io.hpp
new file mode 100644
index 0000000..c72491a
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/variant_io.hpp
@@ -0,0 +1,92 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/variant_io.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_VARIANT_IO_HPP
+#define BOOST_VARIANT_DETAIL_VARIANT_IO_HPP
+
+#include <iosfwd> // for std::basic_ostream forward declare
+
+#include "boost/variant/variant_fwd.hpp"
+
+#include "boost/detail/templated_streams.hpp"
+#include "boost/variant/static_visitor.hpp"
+
+namespace boost {
+
+///////////////////////////////////////////////////////////////////////////////
+// function template operator<<
+//
+// Outputs the content of the given variant to the given ostream.
+//
+
+// forward declare (allows output of embedded variant< variant< ... >, ... >)
+template <
+ BOOST_TEMPLATED_STREAM_ARGS(E,T)
+ BOOST_TEMPLATED_STREAM_COMMA
+ BOOST_VARIANT_ENUM_PARAMS(typename U)
+ >
+inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<(
+ BOOST_TEMPLATED_STREAM(ostream, E,T)& out
+ , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs
+ );
+
+namespace detail { namespace variant {
+
+template <typename OStream>
+class printer
+ : public boost::static_visitor<>
+{
+private: // representation
+
+ OStream& out_;
+
+public: // structors
+
+ explicit printer(OStream& out)
+ : out_( out )
+ {
+ }
+
+public: // visitor interface
+
+ template <typename T>
+ void operator()(const T& operand) const
+ {
+ out_ << operand;
+ }
+
+};
+
+}} // namespace detail::variant
+
+template <
+ BOOST_TEMPLATED_STREAM_ARGS(E,T)
+ BOOST_TEMPLATED_STREAM_COMMA
+ BOOST_VARIANT_ENUM_PARAMS(typename U)
+ >
+inline BOOST_TEMPLATED_STREAM(ostream, E,T)& operator<<(
+ BOOST_TEMPLATED_STREAM(ostream, E,T)& out
+ , const variant< BOOST_VARIANT_ENUM_PARAMS(U) >& rhs
+ )
+{
+ detail::variant::printer<
+ BOOST_TEMPLATED_STREAM(ostream, E,T)
+ > visitor(out);
+
+ rhs.apply_visitor(visitor);
+
+ return out;
+}
+
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_VARIANT_IO_HPP
diff --git a/3rdParty/Boost/src/boost/variant/detail/visitation_impl.hpp b/3rdParty/Boost/src/boost/variant/detail/visitation_impl.hpp
new file mode 100644
index 0000000..36ab906
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/detail/visitation_impl.hpp
@@ -0,0 +1,286 @@
+//-----------------------------------------------------------------------------
+// boost variant/detail/visitation_impl.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_DETAIL_VISITATION_IMPL_HPP
+#define BOOST_VARIANT_DETAIL_VISITATION_IMPL_HPP
+
+#include "boost/config.hpp"
+
+#include "boost/variant/detail/backup_holder.hpp"
+#include "boost/variant/detail/cast_storage.hpp"
+#include "boost/variant/detail/forced_return.hpp"
+#include "boost/variant/detail/generic_result_type.hpp"
+
+#include "boost/assert.hpp"
+#include "boost/mpl/eval_if.hpp"
+#include "boost/mpl/bool.hpp"
+#include "boost/mpl/identity.hpp"
+#include "boost/mpl/int.hpp"
+#include "boost/mpl/next.hpp"
+#include "boost/mpl/deref.hpp"
+#include "boost/mpl/or.hpp"
+#include "boost/preprocessor/cat.hpp"
+#include "boost/preprocessor/inc.hpp"
+#include "boost/preprocessor/repeat.hpp"
+#include "boost/type_traits/is_same.hpp"
+#include "boost/type_traits/has_nothrow_copy.hpp"
+#include "boost/variant/detail/has_nothrow_move.hpp"
+
+
+///////////////////////////////////////////////////////////////////////////////
+// BOOST_VARIANT_VISITATION_UNROLLING_LIMIT
+//
+// Unrolls variant's visitation mechanism to reduce template instantiation
+// and potentially increase runtime performance. (TODO: Investigate further.)
+//
+#if !defined(BOOST_VARIANT_VISITATION_UNROLLING_LIMIT)
+# define BOOST_VARIANT_VISITATION_UNROLLING_LIMIT \
+ BOOST_VARIANT_LIMIT_TYPES
+#endif
+
+namespace boost {
+namespace detail { namespace variant {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class apply_visitor_unrolled
+//
+// Tag type indicates when visitation_impl is unrolled.
+//
+struct apply_visitor_unrolled {};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class template visitation_impl_step
+//
+// "Never ending" iterator range facilitates visitation_impl unrolling.
+//
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename Iter, typename LastIter>
+struct visitation_impl_step
+{
+ typedef typename mpl::deref<Iter>::type type;
+
+ typedef typename mpl::next<Iter>::type next_iter;
+ typedef visitation_impl_step<
+ next_iter, LastIter
+ > next;
+};
+
+template <typename LastIter>
+struct visitation_impl_step< LastIter,LastIter >
+{
+ typedef apply_visitor_unrolled type;
+ typedef visitation_impl_step next;
+};
+
+#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename Iter, typename LastIter>
+struct visitation_impl_step
+{
+ typedef typename mpl::eval_if<
+ is_same<Iter, LastIter>
+ , mpl::identity<apply_visitor_unrolled>
+ , Iter
+ >::type type;
+
+ typedef typename mpl::eval_if<
+ is_same<type, apply_visitor_unrolled> //is_same<Iter, LastIter>
+ , mpl::identity<LastIter>
+ , mpl::next<Iter>
+ >::type next_iter;
+
+ typedef visitation_impl_step<
+ next_iter, LastIter
+ > next;
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) function template visitation_impl_invoke
+//
+// Invokes the given visitor on the specified type in the given storage.
+//
+
+template <typename Visitor, typename VoidPtrCV, typename T>
+inline
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
+visitation_impl_invoke_impl(
+ int, Visitor& visitor, VoidPtrCV storage, T*
+ , mpl::true_// never_uses_backup
+ )
+{
+ return visitor.internal_visit(
+ cast_storage<T>(storage), 1L
+ );
+}
+
+template <typename Visitor, typename VoidPtrCV, typename T>
+inline
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
+visitation_impl_invoke_impl(
+ int internal_which, Visitor& visitor, VoidPtrCV storage, T*
+ , mpl::false_// never_uses_backup
+ )
+{
+ if (internal_which >= 0)
+ {
+ return visitor.internal_visit(
+ cast_storage<T>(storage), 1L
+ );
+ }
+ else
+ {
+ return visitor.internal_visit(
+ cast_storage< backup_holder<T> >(storage), 1L
+ );
+ }
+}
+
+template <typename Visitor, typename VoidPtrCV, typename T, typename NoBackupFlag>
+inline
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
+visitation_impl_invoke(
+ int internal_which, Visitor& visitor, VoidPtrCV storage, T* t
+ , NoBackupFlag
+ , int
+ )
+{
+ typedef typename mpl::or_<
+ NoBackupFlag
+ , has_nothrow_move_constructor<T>
+ , has_nothrow_copy<T>
+ >::type never_uses_backup;
+
+ return visitation_impl_invoke_impl(
+ internal_which, visitor, storage, t
+ , never_uses_backup()
+ );
+}
+
+template <typename Visitor, typename VoidPtrCV, typename NBF>
+inline
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
+visitation_impl_invoke(int, Visitor&, VoidPtrCV, apply_visitor_unrolled*, NBF, long)
+{
+ // should never be here at runtime:
+ BOOST_ASSERT(false);
+ typedef typename Visitor::result_type result_type;
+ return ::boost::detail::variant::forced_return< result_type >();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) function template visitation_impl
+//
+// Invokes the given visitor on the type in the given variant storage.
+//
+
+template <
+ typename W, typename S
+ , typename Visitor, typename VPCV
+ , typename NBF
+ >
+inline
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
+visitation_impl(
+ int, int, Visitor&, VPCV
+ , mpl::true_ // is_apply_visitor_unrolled
+ , NBF, W* = 0, S* = 0
+ )
+{
+ // should never be here at runtime:
+ BOOST_ASSERT(false);
+ typedef typename Visitor::result_type result_type;
+ return ::boost::detail::variant::forced_return< result_type >();
+}
+
+template <
+ typename Which, typename step0
+ , typename Visitor, typename VoidPtrCV
+ , typename NoBackupFlag
+ >
+inline
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
+visitation_impl(
+ const int internal_which, const int logical_which
+ , Visitor& visitor, VoidPtrCV storage
+ , mpl::false_ // is_apply_visitor_unrolled
+ , NoBackupFlag no_backup_flag
+ , Which* = 0, step0* = 0
+ )
+{
+ // Typedef apply_visitor_unrolled steps and associated types...
+# define BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_TYPEDEF(z, N, _) \
+ typedef typename BOOST_PP_CAT(step,N)::type BOOST_PP_CAT(T,N); \
+ typedef typename BOOST_PP_CAT(step,N)::next \
+ BOOST_PP_CAT(step, BOOST_PP_INC(N)); \
+ /**/
+
+ BOOST_PP_REPEAT(
+ BOOST_VARIANT_VISITATION_UNROLLING_LIMIT
+ , BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_TYPEDEF
+ , _
+ )
+
+# undef BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_TYPEDEF
+
+ // ...switch on the target which-index value...
+ switch (logical_which)
+ {
+
+ // ...applying the appropriate case:
+# define BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_CASE(z, N, _) \
+ case (Which::value + (N)): \
+ return visitation_impl_invoke( \
+ internal_which, visitor, storage \
+ , static_cast<BOOST_PP_CAT(T,N)*>(0) \
+ , no_backup_flag, 1L \
+ ); \
+ /**/
+
+ BOOST_PP_REPEAT(
+ BOOST_VARIANT_VISITATION_UNROLLING_LIMIT
+ , BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_CASE
+ , _
+ )
+
+# undef BOOST_VARIANT_AUX_APPLY_VISITOR_STEP_CASE
+
+ }
+
+ // If not handled in this iteration, continue unrolling:
+ typedef mpl::int_<
+ Which::value + (BOOST_VARIANT_VISITATION_UNROLLING_LIMIT)
+ > next_which;
+
+ typedef BOOST_PP_CAT(step, BOOST_VARIANT_VISITATION_UNROLLING_LIMIT)
+ next_step;
+
+ typedef typename next_step::type next_type;
+ typedef typename is_same< next_type,apply_visitor_unrolled >::type
+ is_apply_visitor_unrolled;
+
+ return visitation_impl(
+ internal_which, logical_which
+ , visitor, storage
+ , is_apply_visitor_unrolled()
+ , no_backup_flag
+ , static_cast<next_which*>(0), static_cast<next_step*>(0)
+ );
+}
+
+}} // namespace detail::variant
+} // namespace boost
+
+#endif // BOOST_VARIANT_DETAIL_VISITATION_IMPL_HPP
diff --git a/3rdParty/Boost/src/boost/variant/get.hpp b/3rdParty/Boost/src/boost/variant/get.hpp
new file mode 100644
index 0000000..99a65f6
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/get.hpp
@@ -0,0 +1,202 @@
+//-----------------------------------------------------------------------------
+// boost variant/get.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_GET_HPP
+#define BOOST_VARIANT_GET_HPP
+
+#include <exception>
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+#include "boost/utility/addressof.hpp"
+#include "boost/variant/variant_fwd.hpp"
+
+#include "boost/type_traits/add_reference.hpp"
+#include "boost/type_traits/add_pointer.hpp"
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include "boost/mpl/bool.hpp"
+# include "boost/mpl/or.hpp"
+# include "boost/type_traits/is_same.hpp"
+#endif
+
+namespace boost {
+
+//////////////////////////////////////////////////////////////////////////
+// class bad_get
+//
+// The exception thrown in the event of a failed get of a value.
+//
+class bad_get
+ : public std::exception
+{
+public: // std::exception implementation
+
+ virtual const char * what() const throw()
+ {
+ return "boost::bad_get: "
+ "failed value get using boost::get";
+ }
+
+};
+
+//////////////////////////////////////////////////////////////////////////
+// function template get<T>
+//
+// Retrieves content of given variant object if content is of type T.
+// Otherwise: pointer ver. returns 0; reference ver. throws bad_get.
+//
+
+namespace detail { namespace variant {
+
+// (detail) class template get_visitor
+//
+// Generic static visitor that: if the value is of the specified type,
+// returns a pointer to the value it visits; else a null pointer.
+//
+template <typename T>
+struct get_visitor
+{
+private: // private typedefs
+
+ typedef typename add_pointer<T>::type pointer;
+ typedef typename add_reference<T>::type reference;
+
+public: // visitor typedefs
+
+ typedef pointer result_type;
+
+public: // visitor interfaces
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+ pointer operator()(reference operand) const
+ {
+ return boost::addressof(operand);
+ }
+
+ template <typename U>
+ pointer operator()(const U&) const
+ {
+ return static_cast<pointer>(0);
+ }
+
+#else // MSVC6
+
+private: // helpers, for visitor interfaces (below)
+
+ pointer execute_impl(reference operand, mpl::true_) const
+ {
+ return boost::addressof(operand);
+ }
+
+ template <typename U>
+ pointer execute_impl(const U& operand, mpl::false_) const
+ {
+ return static_cast<pointer>(0);
+ }
+
+public: // visitor interfaces
+
+ template <typename U>
+ pointer operator()(U& operand) const
+ {
+ // MSVC6 finds normal implementation (above) ambiguous,
+ // so we must explicitly disambiguate
+
+ typedef typename mpl::or_<
+ is_same<U, T>
+ , is_same<const U, T>
+ >::type U_is_T;
+
+ return execute_impl(operand, U_is_T());
+ }
+
+#endif // MSVC6 workaround
+
+};
+
+}} // namespace detail::variant
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551))
+# define BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(t) \
+ BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)
+#else
+# define BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(t) \
+ , t* = 0
+#endif
+
+template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) >
+inline
+ typename add_pointer<U>::type
+get(
+ boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >* operand
+ BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U)
+ )
+{
+ typedef typename add_pointer<U>::type U_ptr;
+ if (!operand) return static_cast<U_ptr>(0);
+
+ detail::variant::get_visitor<U> v;
+ return operand->apply_visitor(v);
+}
+
+template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) >
+inline
+ typename add_pointer<const U>::type
+get(
+ const boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >* operand
+ BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U)
+ )
+{
+ typedef typename add_pointer<const U>::type U_ptr;
+ if (!operand) return static_cast<U_ptr>(0);
+
+ detail::variant::get_visitor<const U> v;
+ return operand->apply_visitor(v);
+}
+
+template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) >
+inline
+ typename add_reference<U>::type
+get(
+ boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >& operand
+ BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U)
+ )
+{
+ typedef typename add_pointer<U>::type U_ptr;
+ U_ptr result = get<U>(&operand);
+
+ if (!result)
+ throw bad_get();
+ return *result;
+}
+
+template <typename U, BOOST_VARIANT_ENUM_PARAMS(typename T) >
+inline
+ typename add_reference<const U>::type
+get(
+ const boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >& operand
+ BOOST_VARIANT_AUX_GET_EXPLICIT_TEMPLATE_TYPE(U)
+ )
+{
+ typedef typename add_pointer<const U>::type U_ptr;
+ U_ptr result = get<const U>(&operand);
+
+ if (!result)
+ throw bad_get();
+ return *result;
+}
+
+} // namespace boost
+
+#endif // BOOST_VARIANT_GET_HPP
diff --git a/3rdParty/Boost/src/boost/variant/recursive_variant.hpp b/3rdParty/Boost/src/boost/variant/recursive_variant.hpp
new file mode 100644
index 0000000..c4cd3b0
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/recursive_variant.hpp
@@ -0,0 +1,182 @@
+//-----------------------------------------------------------------------------
+// boost variant/recursive_variant.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_RECURSIVE_VARIANT_HPP
+#define BOOST_VARIANT_RECURSIVE_VARIANT_HPP
+
+#include "boost/variant/variant_fwd.hpp"
+#include "boost/variant/detail/enable_recursive.hpp"
+#include "boost/variant/detail/substitute_fwd.hpp"
+#include "boost/variant/detail/make_variant_list.hpp"
+#include "boost/variant/detail/over_sequence.hpp"
+
+#include "boost/mpl/aux_/lambda_arity_param.hpp"
+
+#if !defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT)
+# include "boost/mpl/eval_if.hpp"
+# include "boost/mpl/identity.hpp"
+# include "boost/mpl/protect.hpp"
+# include "boost/mpl/transform.hpp"
+#else
+# include "boost/preprocessor/cat.hpp"
+# include "boost/preprocessor/repeat.hpp"
+#endif
+
+#include "boost/mpl/bool.hpp"
+#include "boost/mpl/is_sequence.hpp"
+#include "boost/variant/variant.hpp"
+
+namespace boost {
+
+namespace detail { namespace variant {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction specialization substitute
+//
+// Handles embedded variant types when substituting for recursive_variant_.
+//
+
+#if !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+
+template <
+ BOOST_VARIANT_ENUM_PARAMS(typename T)
+ , typename RecursiveVariant
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(typename Arity)
+ >
+struct substitute<
+ ::boost::variant<
+ recursive_flag< T0 >
+ , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T)
+ >
+ , RecursiveVariant
+ , ::boost::recursive_variant_
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(Arity)
+ >
+{
+ typedef ::boost::variant<
+ recursive_flag< T0 >
+ , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T)
+ > type;
+};
+
+template <
+ BOOST_VARIANT_ENUM_PARAMS(typename T)
+ , typename RecursiveVariant
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(typename Arity)
+ >
+struct substitute<
+ ::boost::variant< BOOST_VARIANT_ENUM_PARAMS(T) >
+ , RecursiveVariant
+ , ::boost::recursive_variant_
+ BOOST_MPL_AUX_LAMBDA_ARITY_PARAM(Arity)
+ >
+{
+
+#if !defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT)
+
+private: // helpers, for metafunction result (below)
+
+ typedef typename mpl::eval_if<
+ ::boost::detail::variant::is_over_sequence<T0>
+ , mpl::identity< T0 >
+ , make_variant_list< BOOST_VARIANT_ENUM_PARAMS(T) >
+ >::type initial_types;
+
+ typedef typename mpl::transform<
+ initial_types
+ , mpl::protect< quoted_enable_recursive<RecursiveVariant,mpl::true_> >
+ >::type types;
+
+public: // metafunction result
+
+ typedef ::boost::variant< types > type;
+
+#else // defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT)
+
+private: // helpers, for metafunction result (below)
+
+ #define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS(z,N,_) \
+ typedef typename enable_recursive< \
+ BOOST_PP_CAT(T,N) \
+ , RecursiveVariant \
+ , mpl::true_ \
+ >::type BOOST_PP_CAT(wknd_T,N); \
+ /**/
+
+ BOOST_PP_REPEAT(
+ BOOST_VARIANT_LIMIT_TYPES
+ , BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS
+ , _
+ )
+
+ #undef BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS
+
+public: // metafunction result
+
+ typedef ::boost::variant< BOOST_VARIANT_ENUM_PARAMS(wknd_T) > type;
+
+#endif // BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT workaround
+
+};
+
+#else // defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+
+//
+// no specializations: embedded variants unsupported on these compilers!
+//
+
+#endif // !defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE)
+
+}} // namespace detail::variant
+
+///////////////////////////////////////////////////////////////////////////////
+// metafunction make_recursive_variant
+//
+// See docs and boost/variant/variant_fwd.hpp for more information.
+//
+template < BOOST_VARIANT_ENUM_PARAMS(typename T) >
+struct make_recursive_variant
+{
+public: // metafunction result
+
+ typedef boost::variant<
+ detail::variant::recursive_flag< T0 >
+ , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T)
+ > type;
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// metafunction make_recursive_variant_over
+//
+// See docs and boost/variant/variant_fwd.hpp for more information.
+//
+template <typename Types>
+struct make_recursive_variant_over
+{
+private: // precondition assertions
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ BOOST_STATIC_ASSERT(( ::boost::mpl::is_sequence<Types>::value ));
+#endif
+
+public: // metafunction result
+
+ typedef typename make_recursive_variant<
+ detail::variant::over_sequence< Types >
+ >::type type;
+
+};
+
+} // namespace boost
+
+#endif // BOOST_VARIANT_RECURSIVE_VARIANT_HPP
diff --git a/3rdParty/Boost/src/boost/variant/recursive_wrapper.hpp b/3rdParty/Boost/src/boost/variant/recursive_wrapper.hpp
new file mode 100644
index 0000000..ddc7002
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/recursive_wrapper.hpp
@@ -0,0 +1,123 @@
+//-----------------------------------------------------------------------------
+// boost variant/recursive_wrapper.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_RECURSIVE_WRAPPER_HPP
+#define BOOST_VARIANT_RECURSIVE_WRAPPER_HPP
+
+#include "boost/variant/recursive_wrapper_fwd.hpp"
+#include "boost/checked_delete.hpp"
+
+namespace boost {
+
+//////////////////////////////////////////////////////////////////////////
+// class template recursive_wrapper
+//
+// See docs and recursive_wrapper_fwd.hpp for more information.
+//
+
+template <typename T>
+class recursive_wrapper
+{
+public: // typedefs
+
+ typedef T type;
+
+private: // representation
+
+ T* p_;
+
+public: // structors
+
+ ~recursive_wrapper();
+ recursive_wrapper();
+
+ recursive_wrapper(const recursive_wrapper& operand);
+ recursive_wrapper(const T& operand);
+
+private: // helpers, for modifiers (below)
+
+ void assign(const T& rhs);
+
+public: // modifiers
+
+ recursive_wrapper& operator=(const recursive_wrapper& rhs)
+ {
+ assign( rhs.get() );
+ return *this;
+ }
+
+ recursive_wrapper& operator=(const T& rhs)
+ {
+ assign( rhs );
+ return *this;
+ }
+
+ void swap(recursive_wrapper& operand)
+ {
+ T* temp = operand.p_;
+ operand.p_ = p_;
+ p_ = temp;
+ }
+
+public: // queries
+
+ T& get() { return *get_pointer(); }
+ const T& get() const { return *get_pointer(); }
+
+ T* get_pointer() { return p_; }
+ const T* get_pointer() const { return p_; }
+
+};
+
+template <typename T>
+recursive_wrapper<T>::~recursive_wrapper()
+{
+ boost::checked_delete(p_);
+}
+
+template <typename T>
+recursive_wrapper<T>::recursive_wrapper()
+ : p_(new T)
+{
+}
+
+template <typename T>
+recursive_wrapper<T>::recursive_wrapper(const recursive_wrapper& operand)
+ : p_(new T( operand.get() ))
+{
+}
+
+template <typename T>
+recursive_wrapper<T>::recursive_wrapper(const T& operand)
+ : p_(new T(operand))
+{
+}
+
+template <typename T>
+void recursive_wrapper<T>::assign(const T& rhs)
+{
+ this->get() = rhs;
+}
+
+// function template swap
+//
+// Swaps two recursive_wrapper<T> objects of the same type T.
+//
+template <typename T>
+inline void swap(recursive_wrapper<T>& lhs, recursive_wrapper<T>& rhs)
+{
+ lhs.swap(rhs);
+}
+
+} // namespace boost
+
+#endif // BOOST_VARIANT_RECURSIVE_WRAPPER_HPP
diff --git a/3rdParty/Boost/src/boost/variant/recursive_wrapper_fwd.hpp b/3rdParty/Boost/src/boost/variant/recursive_wrapper_fwd.hpp
new file mode 100644
index 0000000..69a0ec7
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/recursive_wrapper_fwd.hpp
@@ -0,0 +1,147 @@
+//-----------------------------------------------------------------------------
+// boost variant/recursive_wrapper_fwd.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002
+// Eric Friedman, Itay Maman
+//
+// Portions Copyright (C) 2002 David Abrahams
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_RECURSIVE_WRAPPER_FWD_HPP
+#define BOOST_VARIANT_RECURSIVE_WRAPPER_FWD_HPP
+
+#include "boost/mpl/aux_/config/ctps.hpp"
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+# include "boost/mpl/eval_if.hpp"
+# include "boost/mpl/bool.hpp"
+# include "boost/mpl/identity.hpp"
+# include "boost/type.hpp"
+#endif
+
+#include "boost/mpl/aux_/lambda_support.hpp"
+
+// should be the last #include
+#include "boost/type_traits/detail/bool_trait_def.hpp"
+
+namespace boost {
+
+//////////////////////////////////////////////////////////////////////////
+// class template recursive_wrapper
+//
+// Enables recursive types in templates by breaking cyclic dependencies.
+//
+// For example:
+//
+// class my;
+//
+// typedef variant< int, recursive_wrapper<my> > var;
+//
+// class my {
+// var var_;
+// ...
+// };
+//
+template <typename T> class recursive_wrapper;
+
+///////////////////////////////////////////////////////////////////////////////
+// metafunction is_recursive_wrapper (modeled on code by David Abrahams)
+//
+// True iff specified type matches recursive_wrapper<T>.
+//
+
+namespace detail {
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T>
+struct is_recursive_wrapper_impl
+ : mpl::false_
+{
+};
+
+template <typename T>
+struct is_recursive_wrapper_impl< recursive_wrapper<T> >
+ : mpl::true_
+{
+};
+
+#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+typedef char (&yes_recursive_wrapper_t)[1];
+typedef char (&no_recursive_wrapper_t)[2];
+
+no_recursive_wrapper_t is_recursive_wrapper_test(...);
+
+template<typename T>
+yes_recursive_wrapper_t is_recursive_wrapper_test(
+ type< ::boost::recursive_wrapper<T> >
+ );
+
+template<typename T>
+struct is_recursive_wrapper_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value = (
+ sizeof(is_recursive_wrapper_test(type<T>()))
+ == sizeof(yes_recursive_wrapper_t)
+ ));
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(
+ is_recursive_wrapper
+ , T
+ , (::boost::detail::is_recursive_wrapper_impl<T>::value)
+ )
+
+///////////////////////////////////////////////////////////////////////////////
+// metafunction unwrap_recursive
+//
+// If specified type T matches recursive_wrapper<U>, then U; else T.
+//
+
+#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T>
+struct unwrap_recursive
+{
+ typedef T type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,unwrap_recursive,(T))
+};
+
+template <typename T>
+struct unwrap_recursive< recursive_wrapper<T> >
+{
+ typedef T type;
+
+ BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(1,unwrap_recursive,(T))
+};
+
+#else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
+
+template <typename T>
+struct unwrap_recursive
+ : mpl::eval_if<
+ is_recursive_wrapper<T>
+ , T
+ , mpl::identity< T >
+ >
+{
+ BOOST_MPL_AUX_LAMBDA_SUPPORT(1,unwrap_recursive,(T))
+};
+
+#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround
+
+} // namespace boost
+
+#include "boost/type_traits/detail/bool_trait_undef.hpp"
+
+#endif // BOOST_VARIANT_RECURSIVE_WRAPPER_FWD_HPP
diff --git a/3rdParty/Boost/src/boost/variant/static_visitor.hpp b/3rdParty/Boost/src/boost/variant/static_visitor.hpp
new file mode 100644
index 0000000..b59b6f5
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/static_visitor.hpp
@@ -0,0 +1,97 @@
+//-----------------------------------------------------------------------------
+// boost variant/static_visitor.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_STATIC_VISITOR_HPP
+#define BOOST_VARIANT_STATIC_VISITOR_HPP
+
+#include "boost/config.hpp"
+#include "boost/detail/workaround.hpp"
+
+#include "boost/mpl/if.hpp"
+#include "boost/type_traits/is_base_and_derived.hpp"
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+# include "boost/type_traits/is_same.hpp"
+#endif
+
+// should be the last #include
+#include "boost/type_traits/detail/bool_trait_def.hpp"
+
+namespace boost {
+
+//////////////////////////////////////////////////////////////////////////
+// class template static_visitor
+//
+// An empty base class that typedefs the return type of a deriving static
+// visitor. The class is analogous to std::unary_function in this role.
+//
+
+namespace detail {
+
+ struct is_static_visitor_tag { };
+
+ typedef void static_visitor_default_return;
+
+} // namespace detail
+
+template <typename R = ::boost::detail::static_visitor_default_return>
+class static_visitor
+ : public detail::is_static_visitor_tag
+{
+public: // typedefs
+
+ typedef R result_type;
+
+protected: // for use as base class only
+
+ static_visitor() { }
+ ~static_visitor() { }
+
+};
+
+//////////////////////////////////////////////////////////////////////////
+// metafunction is_static_visitor
+//
+// Value metafunction indicates whether the specified type derives from
+// static_visitor<...>.
+//
+// NOTE #1: This metafunction does NOT check whether the specified type
+// fulfills the requirements of the StaticVisitor concept.
+//
+// NOTE #2: This template never needs to be specialized!
+//
+
+namespace detail {
+
+template <typename T>
+struct is_static_visitor_impl
+{
+ BOOST_STATIC_CONSTANT(bool, value =
+ (::boost::is_base_and_derived<
+ detail::is_static_visitor_tag,
+ T
+ >::value));
+};
+
+} // namespace detail
+
+BOOST_TT_AUX_BOOL_TRAIT_DEF1(
+ is_static_visitor
+ , T
+ , (::boost::detail::is_static_visitor_impl<T>::value)
+ )
+
+} // namespace boost
+
+#include "boost/type_traits/detail/bool_trait_undef.hpp"
+
+#endif // BOOST_VARIANT_STATIC_VISITOR_HPP
diff --git a/3rdParty/Boost/src/boost/variant/variant.hpp b/3rdParty/Boost/src/boost/variant/variant.hpp
new file mode 100644
index 0000000..7e3c9e8
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/variant.hpp
@@ -0,0 +1,1862 @@
+//-----------------------------------------------------------------------------
+// boost variant/variant.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_VARIANT_HPP
+#define BOOST_VARIANT_VARIANT_HPP
+
+#include <cstddef> // for std::size_t
+#include <new> // for placement new
+
+#if !defined(BOOST_NO_TYPEID)
+#include <typeinfo> // for typeid, std::type_info
+#endif // BOOST_NO_TYPEID
+
+#include "boost/variant/detail/config.hpp"
+#include "boost/mpl/aux_/config/eti.hpp"
+#include "boost/mpl/aux_/value_wknd.hpp"
+
+#include "boost/variant/variant_fwd.hpp"
+#include "boost/variant/detail/backup_holder.hpp"
+#include "boost/variant/detail/enable_recursive_fwd.hpp"
+#include "boost/variant/detail/forced_return.hpp"
+#include "boost/variant/detail/initializer.hpp"
+#include "boost/variant/detail/make_variant_list.hpp"
+#include "boost/variant/detail/over_sequence.hpp"
+#include "boost/variant/detail/visitation_impl.hpp"
+
+#include "boost/variant/detail/generic_result_type.hpp"
+#include "boost/variant/detail/has_nothrow_move.hpp"
+#include "boost/variant/detail/move.hpp"
+
+#include "boost/detail/reference_content.hpp"
+#include "boost/aligned_storage.hpp"
+#include "boost/blank.hpp"
+#include "boost/static_assert.hpp"
+#include "boost/preprocessor/cat.hpp"
+#include "boost/preprocessor/repeat.hpp"
+#include "boost/type_traits/alignment_of.hpp"
+#include "boost/type_traits/add_const.hpp"
+#include "boost/type_traits/has_nothrow_constructor.hpp"
+#include "boost/type_traits/has_nothrow_copy.hpp"
+#include "boost/type_traits/is_const.hpp"
+#include "boost/type_traits/is_same.hpp"
+#include "boost/utility/enable_if.hpp"
+#include "boost/variant/recursive_wrapper_fwd.hpp"
+#include "boost/variant/static_visitor.hpp"
+
+#include "boost/mpl/eval_if.hpp"
+#include "boost/mpl/begin_end.hpp"
+#include "boost/mpl/bool.hpp"
+#include "boost/mpl/empty.hpp"
+#include "boost/mpl/find_if.hpp"
+#include "boost/mpl/front.hpp"
+#include "boost/mpl/identity.hpp"
+#include "boost/mpl/if.hpp"
+#include "boost/mpl/int.hpp"
+#include "boost/mpl/is_sequence.hpp"
+#include "boost/mpl/iterator_range.hpp"
+#include "boost/mpl/iter_fold_if.hpp"
+#include "boost/mpl/logical.hpp"
+#include "boost/mpl/max_element.hpp"
+#include "boost/mpl/next.hpp"
+#include "boost/mpl/deref.hpp"
+#include "boost/mpl/pair.hpp"
+#include "boost/mpl/protect.hpp"
+#include "boost/mpl/push_front.hpp"
+#include "boost/mpl/same_as.hpp"
+#include "boost/mpl/size_t.hpp"
+#include "boost/mpl/sizeof.hpp"
+#include "boost/mpl/transform.hpp"
+#include "boost/mpl/assert.hpp"
+
+///////////////////////////////////////////////////////////////////////////////
+// Implementation Macros:
+//
+// BOOST_VARIANT_VISITATION_UNROLLING_LIMIT
+// Defined in boost/variant/detail/visitation_impl.hpp.
+//
+// BOOST_VARIANT_MINIMIZE_SIZE
+// When #defined, implementation employs all known means to minimize the
+// size of variant obje cts. However, often unsuccessful due to alignment
+// issues, and potentially harmful to runtime speed, so not enabled by
+// default. (TODO: Investigate further.)
+
+#if defined(BOOST_VARIANT_MINIMIZE_SIZE)
+# include <climits> // for SCHAR_MAX
+# include "boost/mpl/eval_if.hpp"
+# include "boost/mpl/equal_to.hpp"
+# include "boost/mpl/identity.hpp"
+# include "boost/mpl/int.hpp"
+# include "boost/mpl/if.hpp"
+# include "boost/mpl/less.hpp"
+# include "boost/mpl/long.hpp"
+# include "boost/mpl/O1_size.hpp"
+#endif
+
+
+namespace boost {
+
+namespace detail { namespace variant {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction max_value
+//
+// Finds the maximum value of the unary metafunction F over Sequence.
+//
+template <typename Sequence, typename F>
+struct max_value
+{
+private: // helpers, for metafunction result (below)
+
+ typedef typename mpl::transform1<Sequence, F>::type transformed_;
+ typedef typename mpl::max_element<transformed_
+
+ >::type max_it;
+
+public: // metafunction result
+
+ typedef typename mpl::deref<max_it>::type
+ type;
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction find_fallback_type
+//
+// Provides a fallback (i.e., nothrow default-constructible) type from the
+// specified sequence, or no_fallback_type if not found.
+//
+// This implementation is designed to prefer boost::blank over other potential
+// fallback types, regardless of its position in the specified sequence.
+//
+
+class no_fallback_type;
+
+struct find_fallback_type_pred
+{
+ template <typename Iterator>
+ struct apply
+ {
+ private:
+ typedef typename mpl::deref<Iterator>::type t_;
+
+ public:
+ typedef mpl::not_< has_nothrow_constructor<t_> > type;
+ };
+};
+
+template <typename Types>
+struct find_fallback_type
+{
+private: // helpers, for metafunction result (below)
+
+ typedef typename mpl::end<Types>::type end_it;
+
+ // [Find the first suitable fallback type...]
+
+ typedef typename mpl::iter_fold_if<
+ Types
+ , mpl::int_<0>, mpl::protect< mpl::next<> >
+ , mpl::protect< find_fallback_type_pred >
+ >::type first_result_;
+
+ typedef typename first_result_::first first_result_index;
+ typedef typename first_result_::second first_result_it;
+
+ // [...now search the rest of the sequence for boost::blank...]
+
+ typedef typename mpl::iter_fold_if<
+ mpl::iterator_range< first_result_it,end_it >
+ , first_result_index, mpl::protect< mpl::next<> >
+ , mpl::protect< mpl::not_same_as<boost::blank> >
+ >::type second_result_;
+
+ typedef typename second_result_::second second_result_it;
+
+public: // metafunction result
+
+ // [...and return the results of the search:]
+ typedef typename mpl::eval_if<
+ is_same< second_result_it,end_it >
+ , mpl::if_<
+ is_same< first_result_it,end_it >
+ , mpl::pair< no_fallback_type,no_fallback_type >
+ , first_result_
+ >
+ , mpl::identity< second_result_ >
+ >::type type;
+
+};
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+
+template<>
+struct find_fallback_type<int>
+{
+ typedef mpl::pair< no_fallback_type,no_fallback_type > type;
+};
+
+#endif // BOOST_MPL_CFG_MSVC_60_ETI_BUG workaround
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) metafunction make_storage
+//
+// Provides an aligned storage type capable of holding any of the types
+// specified in the given type-sequence.
+//
+
+template <typename Types, typename NeverUsesBackupFlag>
+struct make_storage
+{
+private: // helpers, for metafunction result (below)
+
+ typedef typename mpl::eval_if<
+ NeverUsesBackupFlag
+ , mpl::identity< Types >
+ , mpl::push_front<
+ Types, backup_holder<void*>
+ >
+ >::type types;
+
+ typedef typename max_value<
+ types, mpl::sizeof_<mpl::_1>
+ >::type max_size;
+
+#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551))
+
+ typedef typename max_value<
+ types, alignment_of<mpl::_1>
+ >::type max_alignment;
+
+#else // borland
+
+ // temporary workaround -- use maximal alignment
+ typedef mpl::size_t< -1 > max_alignment;
+
+#endif // borland workaround
+
+public: // metafunction result
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+ typedef ::boost::aligned_storage<
+ BOOST_MPL_AUX_VALUE_WKND(max_size)::value
+ , BOOST_MPL_AUX_VALUE_WKND(max_alignment)::value
+ > type;
+
+#else // MSVC7 and below
+
+ BOOST_STATIC_CONSTANT(std::size_t, msvc_max_size_c = max_size::value);
+ BOOST_STATIC_CONSTANT(std::size_t, msvc_max_alignment_c = max_alignment::value);
+
+ typedef ::boost::aligned_storage<
+ msvc_max_size_c
+ , msvc_max_alignment_c
+ > type;
+
+#endif // MSVC workaround
+
+};
+
+#if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
+
+template<>
+struct make_storage<int,int>
+{
+ typedef int type;
+};
+
+#endif // BOOST_MPL_CFG_MSVC_60_ETI_BUG workaround
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class destroyer
+//
+// Internal visitor that destroys the value it visits.
+//
+struct destroyer
+ : public static_visitor<>
+{
+public: // visitor interfaces
+
+ template <typename T>
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ internal_visit(T& operand, int) const
+ {
+ operand.~T();
+
+#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0551)) || \
+ BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+ operand; // suppresses warnings
+#endif
+
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class template known_get
+//
+// Visitor that returns a reference to content of the specified type.
+//
+// Precondition: visited variant MUST contain logical content of type T.
+//
+template <typename T>
+class known_get
+ : public static_visitor<T&>
+{
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+public: // visitor interface
+
+ T& operator()(T& operand) const
+ {
+ return operand;
+ }
+
+ template <typename U>
+ T& operator()(U&) const
+ {
+ // logical error to be here: see precondition above
+ BOOST_ASSERT(false);
+ return ::boost::detail::variant::forced_return< T& >();
+ }
+
+#else // MSVC6
+
+private: // helpers, for visitor interface (below)
+
+ T& execute(T& operand, mpl::true_) const
+ {
+ return operand;
+ }
+
+ template <typename U>
+ T& execute(U& operand, mpl::false_) const
+ {
+ // logical error to be here: see precondition above
+ BOOST_ASSERT(false);
+ return ::boost::detail::variant::forced_return< T& >();
+ }
+
+public: // visitor interface
+
+ template <typename U>
+ T& operator()(U& operand) const
+ {
+ typedef typename is_same< U,T >::type
+ U_is_T;
+
+ return execute(operand, U_is_T());
+ }
+
+#endif // MSVC6 workaround
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class copy_into
+//
+// Internal visitor that copies the value it visits into the given buffer.
+//
+class copy_into
+ : public static_visitor<>
+{
+private: // representation
+
+ void* storage_;
+
+public: // structors
+
+ explicit copy_into(void* storage)
+ : storage_(storage)
+ {
+ }
+
+public: // internal visitor interface
+
+ template <typename T>
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ internal_visit(boost::detail::variant::backup_holder<T>& operand, long) const
+ {
+ new(storage_) T( operand.get() );
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+ template <typename T>
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ internal_visit(const boost::detail::variant::backup_holder<T>& operand, long) const
+ {
+ new(storage_) T( operand.get() );
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+ template <typename T>
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ internal_visit(const T& operand, int) const
+ {
+ new(storage_) T(operand);
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class assign_storage
+//
+// Internal visitor that assigns the given storage (which must be a
+// constructed value of the same type) to the value it visits.
+//
+struct assign_storage
+ : public static_visitor<>
+{
+private: // representation
+
+ const void* rhs_storage_;
+
+public: // structors
+
+ explicit assign_storage(const void* rhs_storage)
+ : rhs_storage_(rhs_storage)
+ {
+ }
+
+public: // internal visitor interfaces
+
+ template <typename T>
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ internal_visit(backup_holder<T>& lhs_content, long) const
+ {
+ lhs_content.get()
+ = static_cast< const backup_holder<T>* >(rhs_storage_)->get();
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+ template <typename T>
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ internal_visit(const backup_holder<T>& lhs_content, long) const
+ {
+ lhs_content.get()
+ = static_cast< const backup_holder<T>* >(rhs_storage_)->get();
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+ template <typename T>
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ internal_visit(T& lhs_content, int) const
+ {
+ // NOTE TO USER :
+ // Compile error here indicates one of variant's bounded types does
+ // not meet the requirements of the Assignable concept. Thus,
+ // variant is not Assignable.
+ //
+ // Hint: Are any of the bounded types const-qualified or references?
+ //
+ lhs_content = *static_cast< const T* >(rhs_storage_);
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class direct_assigner
+//
+// Generic static visitor that: if and only if the visited value is of the
+// specified type, assigns the given value to the visited value and returns
+// true; else returns false.
+//
+template <typename T>
+class direct_assigner
+ : public static_visitor<bool>
+{
+private: // representation
+
+ const T& rhs_;
+
+public: // structors
+
+ explicit direct_assigner(const T& rhs)
+ : rhs_(rhs)
+ {
+ }
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+
+public: // visitor interface
+
+ bool operator()(T& lhs)
+ {
+ lhs = rhs_;
+ return true;
+ }
+
+ template <typename U>
+ bool operator()(U&)
+ {
+ return false;
+ }
+
+#else // MSVC6
+
+private: // helpers, for visitor interface (below)
+
+ bool execute(T& lhs, mpl::true_)
+ {
+ lhs = rhs_;
+ return true;
+ }
+
+ template <typename U>
+ bool execute(U&, mpl::false_)
+ {
+ return false;
+ }
+
+public: // visitor interface
+
+ template <typename U>
+ bool operator()(U& lhs)
+ {
+ typedef typename is_same<U,T>::type U_is_T;
+ return execute(lhs, U_is_T());
+ }
+
+#endif // MSVC6 workaround
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+private:
+ // silence MSVC warning C4512: assignment operator could not be generated
+ direct_assigner& operator= (direct_assigner const&);
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class backup_assigner
+//
+// Internal visitor that "assigns" the given value to the visited value,
+// using backup to recover if the destroy-copy sequence fails.
+//
+// NOTE: This needs to be a friend of variant, as it needs access to
+// indicate_which, indicate_backup_which, etc.
+//
+template <typename Variant, typename RhsT>
+class backup_assigner
+ : public static_visitor<>
+{
+private: // representation
+
+ Variant& lhs_;
+ int rhs_which_;
+ const RhsT& rhs_content_;
+
+public: // structors
+
+ backup_assigner(Variant& lhs, int rhs_which, const RhsT& rhs_content)
+ : lhs_(lhs)
+ , rhs_which_(rhs_which)
+ , rhs_content_(rhs_content)
+ {
+ }
+
+private: // helpers, for visitor interface (below)
+
+ template <typename LhsT>
+ void backup_assign_impl(
+ LhsT& lhs_content
+ , mpl::true_// has_nothrow_move
+ )
+ {
+ // Move lhs content to backup...
+ LhsT backup_lhs_content(
+ ::boost::detail::variant::move(lhs_content)
+ ); // nothrow
+
+ // ...destroy lhs content...
+ lhs_content.~LhsT(); // nothrow
+
+ try
+ {
+ // ...and attempt to copy rhs content into lhs storage:
+ new(lhs_.storage_.address()) RhsT(rhs_content_);
+ }
+ catch (...)
+ {
+ // In case of failure, restore backup content to lhs storage...
+ new(lhs_.storage_.address())
+ LhsT(
+ ::boost::detail::variant::move(backup_lhs_content)
+ ); // nothrow
+
+ // ...and rethrow:
+ throw;
+ }
+
+ // In case of success, indicate new content type:
+ lhs_.indicate_which(rhs_which_); // nothrow
+ }
+
+ template <typename LhsT>
+ void backup_assign_impl(
+ LhsT& lhs_content
+ , mpl::false_// has_nothrow_move
+ )
+ {
+ // Backup lhs content...
+ LhsT* backup_lhs_ptr = new LhsT(lhs_content);
+
+ // ...destroy lhs content...
+ lhs_content.~LhsT(); // nothrow
+
+ try
+ {
+ // ...and attempt to copy rhs content into lhs storage:
+ new(lhs_.storage_.address()) RhsT(rhs_content_);
+ }
+ catch (...)
+ {
+ // In case of failure, copy backup pointer to lhs storage...
+ new(lhs_.storage_.address())
+ backup_holder<LhsT>( backup_lhs_ptr ); // nothrow
+
+ // ...indicate now using backup...
+ lhs_.indicate_backup_which( lhs_.which() ); // nothrow
+
+ // ...and rethrow:
+ throw;
+ }
+
+ // In case of success, indicate new content type...
+ lhs_.indicate_which(rhs_which_); // nothrow
+
+ // ...and delete backup:
+ delete backup_lhs_ptr; // nothrow
+ }
+
+public: // visitor interface
+
+ template <typename LhsT>
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ internal_visit(LhsT& lhs_content, int)
+ {
+ typedef typename has_nothrow_move_constructor<LhsT>::type
+ nothrow_move;
+
+ backup_assign_impl( lhs_content, nothrow_move() );
+
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+private:
+ // silence MSVC warning C4512: assignment operator could not be generated
+ backup_assigner& operator= (backup_assigner const&);
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class swap_with
+//
+// Visitor that swaps visited value with content of given variant.
+//
+// Precondition: Given variant MUST have same logical type as visited value.
+//
+template <typename Variant>
+struct swap_with
+ : public static_visitor<>
+{
+private: // representation
+
+ Variant& toswap_;
+
+public: // structors
+
+ explicit swap_with(Variant& toswap)
+ : toswap_(toswap)
+ {
+ }
+
+public: // internal visitor interfaces
+
+ template <typename T>
+ void operator()(T& operand) const
+ {
+ // Since the precondition ensures types are same, get T...
+ known_get<T> getter;
+ T& other = toswap_.apply_visitor(getter);
+
+ // ...and swap:
+ ::boost::detail::variant::move_swap( operand, other );
+ }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class reflect
+//
+// Generic static visitor that performs a typeid on the value it visits.
+//
+
+#if !defined(BOOST_NO_TYPEID)
+
+class reflect
+ : public static_visitor<const std::type_info&>
+{
+public: // visitor interfaces
+
+ template <typename T>
+ const std::type_info& operator()(const T&) const
+ {
+ return typeid(T);
+ }
+
+};
+
+#endif // BOOST_NO_TYPEID
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class comparer
+//
+// Generic static visitor that compares the content of the given lhs variant
+// with the visited rhs content using Comp.
+//
+// Precondition: lhs.which() == rhs.which()
+//
+template <typename Variant, typename Comp>
+class comparer
+ : public static_visitor<bool>
+{
+private: // representation
+
+ const Variant& lhs_;
+
+public: // structors
+
+ explicit comparer(const Variant& lhs)
+ : lhs_(lhs)
+ {
+ }
+
+public: // visitor interfaces
+
+ template <typename T>
+ bool operator()(const T& rhs_content) const
+ {
+ // Since the precondition ensures lhs and rhs types are same, get T...
+ known_get<const T> getter;
+ const T& lhs_content = lhs_.apply_visitor(getter);
+
+ // ...and compare lhs and rhs contents:
+ return Comp()(lhs_content, rhs_content);
+ }
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class equal_comp
+//
+// Generic function object compares lhs with rhs using operator==.
+//
+struct equal_comp
+{
+ template <typename T>
+ bool operator()(const T& lhs, const T& rhs) const
+ {
+ return lhs == rhs;
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class less_comp
+//
+// Generic function object compares lhs with rhs using operator<.
+//
+struct less_comp
+{
+ template <typename T>
+ bool operator()(const T& lhs, const T& rhs) const
+ {
+ return lhs < rhs;
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class template invoke_visitor
+//
+// Internal visitor that invokes the given visitor using:
+// * for wrappers (e.g., recursive_wrapper), the wrapper's held value.
+// * for all other values, the value itself.
+//
+template <typename Visitor>
+class invoke_visitor
+{
+private: // representation
+
+ Visitor& visitor_;
+
+public: // visitor typedefs
+
+ typedef typename Visitor::result_type
+ result_type;
+
+public: // structors
+
+ explicit invoke_visitor(Visitor& visitor)
+ : visitor_(visitor)
+ {
+ }
+
+#if !defined(BOOST_NO_VOID_RETURNS)
+
+public: // internal visitor interfaces
+
+ template <typename T>
+ result_type internal_visit(T& operand, int)
+ {
+ return visitor_(operand);
+ }
+
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0564))
+ template <typename T>
+ result_type internal_visit(const T& operand, int)
+ {
+ return visitor_(operand);
+ }
+# endif
+
+#else // defined(BOOST_NO_VOID_RETURNS)
+
+private: // helpers, for internal visitor interfaces (below)
+
+ template <typename T>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ visit_impl(T& operand, mpl::false_)
+ {
+ return visitor_(operand);
+ }
+
+ template <typename T>
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ visit_impl(T& operand, mpl::true_)
+ {
+ visitor_(operand);
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+public: // internal visitor interfaces
+
+ template <typename T>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ internal_visit(T& operand, int)
+ {
+ typedef typename is_same<result_type, void>::type
+ has_void_result_type;
+
+ return visit_impl(operand, has_void_result_type());
+ }
+
+#endif // BOOST_NO_VOID_RETURNS) workaround
+
+public: // internal visitor interfaces, cont.
+
+ template <typename T>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ internal_visit(boost::recursive_wrapper<T>& operand, long)
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ template <typename T>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ internal_visit(const boost::recursive_wrapper<T>& operand, long)
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ template <typename T>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ internal_visit(boost::detail::reference_content<T>& operand, long)
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ template <typename T>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ internal_visit(const boost::detail::reference_content<T>& operand, long)
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ template <typename T>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ internal_visit(boost::detail::variant::backup_holder<T>& operand, long)
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ template <typename T>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ internal_visit(const boost::detail::variant::backup_holder<T>& operand, long)
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+private:
+ // silence MSVC warning C4512: assignment operator could not be generated
+ invoke_visitor& operator= (invoke_visitor const&);
+#endif
+};
+
+}} // namespace detail::variant
+
+///////////////////////////////////////////////////////////////////////////////
+// class template variant (concept inspired by Andrei Alexandrescu)
+//
+// See docs and boost/variant/variant_fwd.hpp for more information.
+//
+template <
+ typename T0_
+ , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(typename T)
+ >
+class variant
+{
+private: // helpers, for typedefs (below)
+
+ typedef variant wknd_self_t;
+
+ struct is_recursive_
+ : detail::variant::is_recursive_flag<T0_>
+ {
+ };
+
+ typedef typename mpl::eval_if<
+ is_recursive_
+ , T0_
+ , mpl::identity< T0_ >
+ >::type unwrapped_T0_;
+
+ struct is_sequence_based_
+ : detail::variant::is_over_sequence<unwrapped_T0_>
+ {
+ };
+
+#if !defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT)
+
+private: // helpers, for typedefs (below)
+
+ typedef typename mpl::eval_if<
+ is_sequence_based_
+ , unwrapped_T0_ // over_sequence<...>::type
+ , detail::variant::make_variant_list<
+ unwrapped_T0_
+ , BOOST_VARIANT_ENUM_SHIFTED_PARAMS(T)
+ >
+ >::type specified_types;
+
+ BOOST_STATIC_ASSERT((
+ ::boost::mpl::not_< mpl::empty<specified_types> >::value
+ ));
+
+ typedef typename mpl::eval_if<
+ is_recursive_
+ , mpl::transform<
+ specified_types
+ , mpl::protect<
+ detail::variant::quoted_enable_recursive<wknd_self_t>
+ >
+ >
+ , mpl::identity< specified_types >
+ >::type recursive_enabled_types;
+
+public: // public typedefs
+
+ typedef typename mpl::transform<
+ recursive_enabled_types
+ , unwrap_recursive<mpl::_1>
+ >::type types;
+
+private: // internal typedefs
+
+ typedef typename mpl::transform<
+ recursive_enabled_types
+ , mpl::protect< detail::make_reference_content<> >
+ >::type internal_types;
+
+ typedef typename mpl::front<
+ internal_types
+ >::type internal_T0;
+
+#else // defined(BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT)
+
+private: // helpers, for typedefs (below)
+
+ typedef unwrapped_T0_ T0;
+
+ #define BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS(z,N,_) \
+ typedef typename mpl::eval_if< \
+ is_recursive_ \
+ , detail::variant::enable_recursive< \
+ BOOST_PP_CAT(T,N) \
+ , wknd_self_t \
+ > \
+ , mpl::identity< BOOST_PP_CAT(T,N) > \
+ >::type BOOST_PP_CAT(recursive_enabled_T,N); \
+ /**/
+
+ BOOST_PP_REPEAT(
+ BOOST_VARIANT_LIMIT_TYPES
+ , BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS
+ , _
+ )
+
+ #undef BOOST_VARIANT_AUX_ENABLE_RECURSIVE_TYPEDEFS
+
+ #define BOOST_VARIANT_AUX_UNWRAP_RECURSIVE_TYPEDEFS(z,N,_) \
+ typedef typename unwrap_recursive< \
+ BOOST_PP_CAT(recursive_enabled_T,N) \
+ >::type BOOST_PP_CAT(public_T,N); \
+ /**/
+
+ BOOST_PP_REPEAT(
+ BOOST_VARIANT_LIMIT_TYPES
+ , BOOST_VARIANT_AUX_UNWRAP_RECURSIVE_TYPEDEFS
+ , _
+ )
+
+ #undef BOOST_VARIANT_AUX_UNWRAP_RECURSIVE_TYPEDEFS
+
+public: // public typedefs
+
+ typedef typename detail::variant::make_variant_list<
+ BOOST_VARIANT_ENUM_PARAMS(public_T)
+ >::type types;
+
+private: // helpers, for internal typedefs (below)
+
+ #define BOOST_VARIANT_AUX_MAKE_REFERENCE_CONTENT_TYPEDEFS(z,N,_) \
+ typedef detail::make_reference_content< \
+ BOOST_PP_CAT(recursive_enabled_T,N) \
+ >::type BOOST_PP_CAT(internal_T,N); \
+ /**/
+
+ BOOST_PP_REPEAT(
+ BOOST_VARIANT_LIMIT_TYPES
+ , BOOST_VARIANT_AUX_MAKE_REFERENCE_CONTENT_TYPEDEFS
+ , _
+ )
+
+ #undef BOOST_VARIANT_AUX_MAKE_REFERENCE_CONTENT_TYPEDEFS
+
+private: // internal typedefs
+
+ typedef typename detail::variant::make_variant_list<
+ BOOST_VARIANT_ENUM_PARAMS(internal_T)
+ >::type internal_types;
+
+private: // static precondition assertions
+
+ // NOTE TO USER :
+ // variant< type-sequence > syntax is not supported on this compiler!
+ //
+ BOOST_MPL_ASSERT_NOT(( is_sequence_based_ ));
+
+#endif // BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT workaround
+
+private: // helpers, for representation (below)
+
+ typedef typename detail::variant::find_fallback_type<
+ internal_types
+ >::type fallback_type_result_;
+
+ typedef typename fallback_type_result_::first
+ fallback_type_index_;
+ typedef typename fallback_type_result_::second
+ fallback_type_;
+
+ struct has_fallback_type_
+ : mpl::not_<
+ is_same< fallback_type_, detail::variant::no_fallback_type >
+ >
+ {
+ };
+
+ typedef has_fallback_type_
+ never_uses_backup_flag;
+
+ typedef typename detail::variant::make_storage<
+ internal_types, never_uses_backup_flag
+ >::type storage_t;
+
+private: // helpers, for representation (below)
+
+ // which_ on:
+ // * [0, size<internal_types>) indicates stack content
+ // * [-size<internal_types>, 0) indicates pointer to heap backup
+ // if which_ >= 0:
+ // * then which() -> which_
+ // * else which() -> -(which_ + 1)
+
+#if !defined(BOOST_VARIANT_MINIMIZE_SIZE)
+
+ typedef int which_t;
+
+#else // defined(BOOST_VARIANT_MINIMIZE_SIZE)
+
+ // [if O1_size available, then attempt which_t size optimization...]
+ // [select signed char if fewer than SCHAR_MAX types, else signed int:]
+ typedef typename mpl::eval_if<
+ mpl::equal_to< mpl::O1_size<internal_types>, mpl::long_<-1> >
+ , mpl::identity< int >
+ , mpl::if_<
+ mpl::less< mpl::O1_size<internal_types>, mpl::int_<SCHAR_MAX> >
+ , signed char
+ , int
+ >
+ >::type which_t;
+
+#endif // BOOST_VARIANT_MINIMIZE_SIZE switch
+
+// representation -- private when possible
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ private:
+#else
+ public:
+#endif
+
+ which_t which_;
+ storage_t storage_;
+
+ void indicate_which(int which)
+ {
+ which_ = static_cast<which_t>( which );
+ }
+
+ void indicate_backup_which(int which)
+ {
+ which_ = static_cast<which_t>( -(which + 1) );
+ }
+
+private: // helpers, for queries (below)
+
+ bool using_backup() const
+ {
+ return which_ < 0;
+ }
+
+public: // queries
+
+ int which() const
+ {
+ // If using heap backup...
+ if (using_backup())
+ // ...then return adjusted which_:
+ return -(which_ + 1);
+
+ // Otherwise, return which_ directly:
+ return which_;
+ }
+
+private: // helpers, for structors (below)
+
+ struct initializer
+ : BOOST_VARIANT_AUX_INITIALIZER_T(
+ recursive_enabled_types, recursive_enabled_T
+ )
+ {
+ };
+
+ void destroy_content()
+ {
+ detail::variant::destroyer visitor;
+ this->internal_apply_visitor(visitor);
+ }
+
+public: // structors
+
+ ~variant()
+ {
+ destroy_content();
+ }
+
+ variant()
+ {
+ // NOTE TO USER :
+ // Compile error from here indicates that the first bound
+ // type is not default-constructible, and so variant cannot
+ // support its own default-construction.
+ //
+ new( storage_.address() ) internal_T0();
+ indicate_which(0); // zero is the index of the first bounded type
+ }
+
+private: // helpers, for structors, cont. (below)
+
+ class convert_copy_into
+ : public static_visitor<int>
+ {
+ private: // representation
+
+ void* storage_;
+
+ public: // structors
+
+ explicit convert_copy_into(void* storage)
+ : storage_(storage)
+ {
+ }
+
+ public: // internal visitor interfaces (below)
+
+ template <typename T>
+ int internal_visit(T& operand, int) const
+ {
+ // NOTE TO USER :
+ // Compile error here indicates one of the source variant's types
+ // cannot be unambiguously converted to the destination variant's
+ // types (or that no conversion exists).
+ //
+ return initializer::initialize(storage_, operand);
+ }
+
+# if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x0564))
+ template <typename T>
+ result_type internal_visit(const T& operand, int) const
+ {
+ return initializer::initialize(storage_, operand);
+ }
+# endif
+
+ template <typename T>
+ int internal_visit(boost::detail::reference_content<T>& operand, long) const
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ template <typename T>
+ int internal_visit(const boost::detail::reference_content<T>& operand, long) const
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ template <typename T>
+ int internal_visit(boost::detail::variant::backup_holder<T>& operand, long) const
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ template <typename T>
+ int internal_visit(const boost::detail::variant::backup_holder<T>& operand, long) const
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ template <typename T>
+ int internal_visit(boost::recursive_wrapper<T>& operand, long) const
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ template <typename T>
+ int internal_visit(const boost::recursive_wrapper<T>& operand, long) const
+ {
+ return internal_visit( operand.get(), 1L );
+ }
+
+ };
+
+ friend class convert_copy_into;
+
+private: // helpers, for structors, below
+
+ template <typename T>
+ void convert_construct(
+ T& operand
+ , int
+ , mpl::false_ = mpl::false_() // is_foreign_variant
+ )
+ {
+ // NOTE TO USER :
+ // Compile error here indicates that the given type is not
+ // unambiguously convertible to one of the variant's types
+ // (or that no conversion exists).
+ //
+ indicate_which(
+ initializer::initialize(
+ storage_.address()
+ , operand
+ )
+ );
+ }
+
+ template <typename Variant>
+ void convert_construct(
+ Variant& operand
+ , long
+ , mpl::true_// is_foreign_variant
+ )
+ {
+ convert_copy_into visitor(storage_.address());
+ indicate_which(
+ operand.internal_apply_visitor(visitor)
+ );
+ }
+
+ template <typename Variant>
+ void convert_construct_variant(Variant& operand)
+ {
+ // [Determine if the given variant is itself a bounded type, or if its
+ // content needs to be converted (i.e., it is a 'foreign' variant):]
+ //
+
+ typedef typename mpl::find_if<
+ types
+ , is_same<
+ add_const<mpl::_1>
+ , const Variant
+ >
+ >::type found_it;
+
+ typedef typename mpl::end<types>::type not_found;
+ typedef typename is_same<
+ found_it, not_found
+ >::type is_foreign_variant;
+
+ // Convert construct from operand:
+ convert_construct(
+ operand, 1L
+ , is_foreign_variant()
+ );
+ }
+
+ template <BOOST_VARIANT_ENUM_PARAMS(typename U)>
+ void convert_construct(
+ boost::variant<BOOST_VARIANT_ENUM_PARAMS(U)>& operand
+ , long
+ )
+ {
+ convert_construct_variant(operand);
+ }
+
+ template <BOOST_VARIANT_ENUM_PARAMS(typename U)>
+ void convert_construct(
+ const boost::variant<BOOST_VARIANT_ENUM_PARAMS(U)>& operand
+ , long
+ )
+ {
+ convert_construct_variant(operand);
+ }
+
+public: // structors, cont.
+
+#if !defined(BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING)
+
+ template <typename T>
+ variant(const T& operand)
+ {
+ convert_construct(operand, 1L);
+ }
+
+ template <typename T>
+ variant(T& operand)
+ {
+ convert_construct(operand, 1L);
+ }
+
+#elif defined(BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND)
+
+ // For compilers that cannot distinguish between T& and const T& in
+ // template constructors, but do fully support SFINAE, we can workaround:
+
+ template <typename T>
+ variant(const T& operand)
+ {
+ convert_construct(operand, 1L);
+ }
+
+ template <typename T>
+ variant(
+ T& operand
+ , typename enable_if<
+ mpl::not_< is_const<T> >
+ , void
+ >::type* = 0
+ )
+ {
+ convert_construct(operand, 1L);
+ }
+
+#else // !defined(BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND)
+
+ // For compilers that cannot distinguish between T& and const T& in
+ // template constructors, and do NOT support SFINAE, we can't workaround:
+
+ template <typename T>
+ variant(const T& operand)
+ {
+ convert_construct(operand, 1L);
+ }
+
+#endif // BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING workarounds
+
+public: // structors, cont.
+
+ // [MSVC6 requires copy constructor appear after template constructors]
+ variant(const variant& operand)
+ {
+ // Copy the value of operand into *this...
+ detail::variant::copy_into visitor( storage_.address() );
+ operand.internal_apply_visitor(visitor);
+
+ // ...and activate the *this's primary storage on success:
+ indicate_which(operand.which());
+ }
+
+private: // helpers, for modifiers (below)
+
+# if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+ template <typename Variant, typename RhsT>
+ friend class detail::variant::backup_assigner;
+# endif
+
+ // class assigner
+ //
+ // Internal visitor that "assigns" the visited value to the given variant
+ // by appropriate destruction and copy-construction.
+ //
+
+ class assigner
+ : public static_visitor<>
+ {
+ private: // representation
+
+ variant& lhs_;
+ int rhs_which_;
+
+ public: // structors
+
+ assigner(variant& lhs, int rhs_which)
+ : lhs_(lhs)
+ , rhs_which_(rhs_which)
+ {
+ }
+
+ private: // helpers, for internal visitor interface (below)
+
+ template <typename RhsT, typename B1, typename B2>
+ void assign_impl(
+ const RhsT& rhs_content
+ , mpl::true_// has_nothrow_copy
+ , B1// has_nothrow_move_constructor
+ , B2// has_fallback_type
+ )
+ {
+ // Destroy lhs's content...
+ lhs_.destroy_content(); // nothrow
+
+ // ...copy rhs content into lhs's storage...
+ new(lhs_.storage_.address())
+ RhsT( rhs_content ); // nothrow
+
+ // ...and indicate new content type:
+ lhs_.indicate_which(rhs_which_); // nothrow
+ }
+
+ template <typename RhsT, typename B>
+ void assign_impl(
+ const RhsT& rhs_content
+ , mpl::false_// has_nothrow_copy
+ , mpl::true_// has_nothrow_move_constructor
+ , B// has_fallback_type
+ )
+ {
+ // Attempt to make a temporary copy (so as to move it below)...
+ RhsT temp(rhs_content);
+
+ // ...and upon success destroy lhs's content...
+ lhs_.destroy_content(); // nothrow
+
+ // ...move the temporary copy into lhs's storage...
+ new(lhs_.storage_.address())
+ RhsT( detail::variant::move(temp) ); // nothrow
+
+ // ...and indicate new content type:
+ lhs_.indicate_which(rhs_which_); // nothrow
+ }
+
+ template <typename RhsT>
+ void assign_impl(
+ const RhsT& rhs_content
+ , mpl::false_// has_nothrow_copy
+ , mpl::false_// has_nothrow_move_constructor
+ , mpl::true_// has_fallback_type
+ )
+ {
+ // Destroy lhs's content...
+ lhs_.destroy_content(); // nothrow
+
+ try
+ {
+ // ...and attempt to copy rhs's content into lhs's storage:
+ new(lhs_.storage_.address())
+ RhsT( rhs_content );
+ }
+ catch (...)
+ {
+ // In case of failure, default-construct fallback type in lhs's storage...
+ new (lhs_.storage_.address())
+ fallback_type_; // nothrow
+
+ // ...indicate construction of fallback type...
+ lhs_.indicate_which(
+ BOOST_MPL_AUX_VALUE_WKND(fallback_type_index_)::value
+ ); // nothrow
+
+ // ...and rethrow:
+ throw;
+ }
+
+ // In the event of success, indicate new content type:
+ lhs_.indicate_which(rhs_which_); // nothrow
+ }
+
+ template <typename RhsT>
+ void assign_impl(
+ const RhsT& rhs_content
+ , mpl::false_// has_nothrow_copy
+ , mpl::false_// has_nothrow_move_constructor
+ , mpl::false_// has_fallback_type
+ )
+ {
+ detail::variant::backup_assigner<wknd_self_t, RhsT>
+ visitor(lhs_, rhs_which_, rhs_content);
+ lhs_.internal_apply_visitor(visitor);
+ }
+
+ public: // internal visitor interfaces
+
+ template <typename RhsT>
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ internal_visit(const RhsT& rhs_content, int)
+ {
+ typedef typename has_nothrow_copy<RhsT>::type
+ nothrow_copy;
+ typedef typename mpl::or_< // reduces compile-time
+ nothrow_copy
+ , detail::variant::has_nothrow_move_constructor<RhsT>
+ >::type nothrow_move_constructor;
+
+ assign_impl(
+ rhs_content
+ , nothrow_copy()
+ , nothrow_move_constructor()
+ , has_fallback_type_()
+ );
+
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1600))
+ private:
+ // silence MSVC warning C4512: assignment operator could not be generated
+ assigner& operator= (assigner const&);
+#endif
+ };
+
+ friend class assigner;
+
+ void variant_assign(const variant& rhs)
+ {
+ // If the contained types are EXACTLY the same...
+ if (which_ == rhs.which_)
+ {
+ // ...then assign rhs's storage to lhs's content:
+ detail::variant::assign_storage visitor(rhs.storage_.address());
+ this->internal_apply_visitor(visitor);
+ }
+ else
+ {
+ // Otherwise, perform general (copy-based) variant assignment:
+ assigner visitor(*this, rhs.which());
+ rhs.internal_apply_visitor(visitor);
+ }
+ }
+
+private: // helpers, for modifiers (below)
+
+ template <typename T>
+ void assign(const T& rhs)
+ {
+ // If direct T-to-T assignment is not possible...
+ detail::variant::direct_assigner<T> direct_assign(rhs);
+ if (this->apply_visitor(direct_assign) == false)
+ {
+ // ...then convert rhs to variant and assign:
+ //
+ // While potentially inefficient, the following construction of a
+ // variant allows T as any type convertible to one of the bounded
+ // types without excessive code redundancy.
+ //
+ variant temp(rhs);
+ variant_assign( detail::variant::move(temp) );
+ }
+ }
+
+public: // modifiers
+
+ template <typename T>
+ variant& operator=(const T& rhs)
+ {
+ assign(rhs);
+ return *this;
+ }
+
+ // [MSVC6 requires copy assign appear after templated operator=]
+ variant& operator=(const variant& rhs)
+ {
+ variant_assign(rhs);
+ return *this;
+ }
+
+ void swap(variant& rhs)
+ {
+ // If the contained types are the same...
+ if (which() == rhs.which())
+ {
+ // ...then swap the values directly:
+ detail::variant::swap_with<variant> visitor(rhs);
+ this->apply_visitor(visitor);
+ }
+ else
+ {
+ // ...otherwise, perform general variant swap:
+ variant tmp( detail::variant::move(rhs) );
+ rhs = detail::variant::move(*this);
+ *this = detail::variant::move(tmp);
+ }
+ }
+
+public: // queries
+
+ //
+ // NOTE: member which() defined above.
+ //
+
+ bool empty() const
+ {
+ return false;
+ }
+
+#if !defined(BOOST_NO_TYPEID)
+ const std::type_info& type() const
+ {
+ detail::variant::reflect visitor;
+ return this->apply_visitor(visitor);
+ }
+#endif
+
+public: // prevent comparison with foreign types
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+
+# define BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE \
+ void
+
+#else // MSVC7
+
+ //
+ // MSVC7 gives error about return types for above being different than
+ // the true comparison operator overloads:
+ //
+
+# define BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE \
+ bool
+
+#endif // MSVC7 workaround
+
+ template <typename U>
+ BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE
+ operator==(const U&) const
+ {
+ BOOST_STATIC_ASSERT( false && sizeof(U) );
+ }
+
+ template <typename U>
+ BOOST_VARIANT_AUX_FAIL_COMPARISON_RETURN_TYPE
+ operator<(const U&) const
+ {
+ BOOST_STATIC_ASSERT( false && sizeof(U) );
+ }
+
+public: // comparison operators
+
+ // [MSVC6 requires these operators appear after template operators]
+
+ bool operator==(const variant& rhs) const
+ {
+ if (this->which() != rhs.which())
+ return false;
+
+ detail::variant::comparer<
+ variant, detail::variant::equal_comp
+ > visitor(*this);
+ return rhs.apply_visitor(visitor);
+ }
+
+ bool operator<(const variant& rhs) const
+ {
+ //
+ // Dirk Schreib suggested this collating order.
+ //
+
+ if (this->which() != rhs.which())
+ return this->which() < rhs.which();
+
+ detail::variant::comparer<
+ variant, detail::variant::less_comp
+ > visitor(*this);
+ return rhs.apply_visitor(visitor);
+ }
+
+// helpers, for visitation support (below) -- private when possible
+#if !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+
+ template < BOOST_VARIANT_ENUM_PARAMS(typename U) >
+ friend class variant;
+
+private:
+
+#else// defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+
+public:
+
+#endif// !defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
+
+ template <typename Visitor, typename VoidPtrCV>
+ static
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(
+ typename Visitor::result_type
+ )
+ internal_apply_visitor_impl(
+ int internal_which
+ , int logical_which
+ , Visitor& visitor
+ , VoidPtrCV storage
+ )
+ {
+ typedef mpl::int_<0> first_which;
+ typedef typename mpl::begin<internal_types>::type first_it;
+ typedef typename mpl::end<internal_types>::type last_it;
+
+ typedef detail::variant::visitation_impl_step<
+ first_it, last_it
+ > first_step;
+
+ return detail::variant::visitation_impl(
+ internal_which, logical_which
+ , visitor, storage, mpl::false_()
+ , never_uses_backup_flag()
+ , static_cast<first_which*>(0), static_cast<first_step*>(0)
+ );
+ }
+
+ template <typename Visitor>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(
+ typename Visitor::result_type
+ )
+ internal_apply_visitor(Visitor& visitor)
+ {
+ return internal_apply_visitor_impl(
+ which_, which(), visitor, storage_.address()
+ );
+ }
+
+ template <typename Visitor>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(
+ typename Visitor::result_type
+ )
+ internal_apply_visitor(Visitor& visitor) const
+ {
+ return internal_apply_visitor_impl(
+ which_, which(), visitor, storage_.address()
+ );
+ }
+
+public: // visitation support
+
+ template <typename Visitor>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(
+ typename Visitor::result_type
+ )
+ apply_visitor(Visitor& visitor)
+ {
+ detail::variant::invoke_visitor<Visitor> invoker(visitor);
+ return this->internal_apply_visitor(invoker);
+ }
+
+ template <typename Visitor>
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(
+ typename Visitor::result_type
+ )
+ apply_visitor(Visitor& visitor) const
+ {
+ detail::variant::invoke_visitor<Visitor> invoker(visitor);
+ return this->internal_apply_visitor(invoker);
+ }
+
+}; // class variant
+
+///////////////////////////////////////////////////////////////////////////////
+// metafunction make_variant_over
+//
+// See docs and boost/variant/variant_fwd.hpp for more information.
+//
+template <typename Types>
+struct make_variant_over
+{
+private: // precondition assertions
+
+#if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+ BOOST_STATIC_ASSERT(( ::boost::mpl::is_sequence<Types>::value ));
+#endif
+
+public: // metafunction result
+
+ typedef variant<
+ detail::variant::over_sequence< Types >
+ > type;
+
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// function template swap
+//
+// Swaps two variants of the same type (i.e., identical specification).
+//
+template < BOOST_VARIANT_ENUM_PARAMS(typename T) >
+inline void swap(
+ variant< BOOST_VARIANT_ENUM_PARAMS(T) >& lhs
+ , variant< BOOST_VARIANT_ENUM_PARAMS(T) >& rhs
+ )
+{
+ lhs.swap(rhs);
+}
+
+} // namespace boost
+
+// implementation additions
+
+#if !defined(BOOST_NO_IOSTREAM)
+#include "boost/variant/detail/variant_io.hpp"
+#endif // BOOST_NO_IOSTREAM
+
+#endif // BOOST_VARIANT_VARIANT_HPP
diff --git a/3rdParty/Boost/src/boost/variant/variant_fwd.hpp b/3rdParty/Boost/src/boost/variant/variant_fwd.hpp
new file mode 100644
index 0000000..7482ad4
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/variant_fwd.hpp
@@ -0,0 +1,253 @@
+//-----------------------------------------------------------------------------
+// boost variant/variant_fwd.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2003
+// Eric Friedman, Itay Maman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_VARIANT_FWD_HPP
+#define BOOST_VARIANT_VARIANT_FWD_HPP
+
+#include "boost/variant/detail/config.hpp"
+
+#include "boost/blank_fwd.hpp"
+#include "boost/mpl/arg.hpp"
+#include "boost/mpl/limits/arity.hpp"
+#include "boost/mpl/aux_/na.hpp"
+#include "boost/preprocessor/cat.hpp"
+#include "boost/preprocessor/enum.hpp"
+#include "boost/preprocessor/enum_params.hpp"
+#include "boost/preprocessor/enum_shifted_params.hpp"
+#include "boost/preprocessor/repeat.hpp"
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_LIMIT_TYPES
+//
+// Implementation-defined preprocessor symbol describing the actual
+// length of variant's pseudo-variadic template parameter list.
+//
+#include "boost/mpl/limits/list.hpp"
+#define BOOST_VARIANT_LIMIT_TYPES \
+ BOOST_MPL_LIMIT_LIST_SIZE
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_NO_REFERENCE_SUPPORT
+//
+// Defined if variant does not support references as bounded types.
+//
+#if defined(BOOST_VARIANT_AUX_BROKEN_CONSTRUCTOR_TEMPLATE_ORDERING) \
+ && !defined(BOOST_VARIANT_AUX_HAS_CONSTRUCTOR_TEMPLATE_ORDERING_SFINAE_WKND) \
+ && !defined(BOOST_VARIANT_NO_REFERENCE_SUPPORT)
+# define BOOST_VARIANT_NO_REFERENCE_SUPPORT
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT
+//
+// Defined if variant does not support make_variant_over (see below).
+//
+#if defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
+# define BOOST_VARIANT_NO_TYPE_SEQUENCE_SUPPORT
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT
+//
+// Defined if make_recursive_variant cannot be supported as documented.
+//
+// Note: Currently, MPL lambda facility is used as workaround if defined, and
+// so only types declared w/ MPL lambda workarounds will work.
+//
+
+#include "boost/variant/detail/substitute_fwd.hpp"
+
+#if defined(BOOST_VARIANT_DETAIL_NO_SUBSTITUTE) \
+ && !defined(BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT)
+# define BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_RECURSIVE_VARIANT_MAX_ARITY
+//
+// Exposes maximum allowed arity of class templates with recursive_variant
+// arguments. That is,
+// make_recursive_variant< ..., T<[1], recursive_variant_, ... [N]> >.
+//
+#include "boost/mpl/limits/arity.hpp"
+#define BOOST_VARIANT_RECURSIVE_VARIANT_MAX_ARITY \
+ BOOST_MPL_LIMIT_METAFUNCTION_ARITY
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_ENUM_PARAMS
+//
+// Convenience macro for enumeration of BOOST_VARIANT_LIMIT_TYPES params.
+//
+// Rationale: Cleaner, simpler code for clients of variant library.
+//
+#define BOOST_VARIANT_ENUM_PARAMS( param ) \
+ BOOST_PP_ENUM_PARAMS(BOOST_VARIANT_LIMIT_TYPES, param)
+
+///////////////////////////////////////////////////////////////////////////////
+// macro BOOST_VARIANT_ENUM_SHIFTED_PARAMS
+//
+// Convenience macro for enumeration of BOOST_VARIANT_LIMIT_TYPES-1 params.
+//
+#define BOOST_VARIANT_ENUM_SHIFTED_PARAMS( param ) \
+ BOOST_PP_ENUM_SHIFTED_PARAMS(BOOST_VARIANT_LIMIT_TYPES, param)
+
+
+namespace boost {
+
+namespace detail { namespace variant {
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) class void_ and class template convert_void
+//
+// Provides the mechanism by which void(NN) types are converted to
+// mpl::void_ (and thus can be passed to mpl::list).
+//
+// Rationale: This is particularly needed for the using-declarations
+// workaround (below), but also to avoid associating mpl namespace with
+// variant in argument dependent lookups (which used to happen because of
+// defaulting of template parameters to mpl::void_).
+//
+
+struct void_;
+
+template <typename T>
+struct convert_void
+{
+ typedef T type;
+};
+
+template <>
+struct convert_void< void_ >
+{
+ typedef mpl::na type;
+};
+
+///////////////////////////////////////////////////////////////////////////////
+// (workaround) BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE
+//
+// Needed to work around compilers that don't support using-declaration
+// overloads. (See the variant::initializer workarounds below.)
+//
+
+#if defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
+
+// (detail) tags voidNN -- NN defined on [0, BOOST_VARIANT_LIMIT_TYPES)
+//
+// Defines void types that are each unique and specializations of
+// convert_void that yields mpl::na for each voidNN type.
+//
+
+#define BOOST_VARIANT_DETAIL_DEFINE_VOID_N(z,N,_) \
+ struct BOOST_PP_CAT(void,N); \
+ \
+ template <> \
+ struct convert_void< BOOST_PP_CAT(void,N) > \
+ { \
+ typedef mpl::na type; \
+ }; \
+ /**/
+
+BOOST_PP_REPEAT(
+ BOOST_VARIANT_LIMIT_TYPES
+ , BOOST_VARIANT_DETAIL_DEFINE_VOID_N
+ , _
+ )
+
+#undef BOOST_VARIANT_DETAIL_DEFINE_VOID_N
+
+#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround
+
+}} // namespace detail::variant
+
+///////////////////////////////////////////////////////////////////////////////
+// (detail) macro BOOST_VARIANT_AUX_DECLARE_PARAM
+//
+// Template parameter list for variant and recursive_variant declarations.
+//
+
+#if !defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
+
+# define BOOST_VARIANT_AUX_DECLARE_PARAMS_IMPL(z, N, T) \
+ typename BOOST_PP_CAT(T,N) = detail::variant::void_ \
+ /**/
+
+#else // defined(BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE)
+
+# define BOOST_VARIANT_AUX_DECLARE_PARAMS_IMPL(z, N, T) \
+ typename BOOST_PP_CAT(T,N) = BOOST_PP_CAT(detail::variant::void,N) \
+ /**/
+
+#endif // BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE workaround
+
+#define BOOST_VARIANT_AUX_DECLARE_PARAMS \
+ BOOST_PP_ENUM( \
+ BOOST_VARIANT_LIMIT_TYPES \
+ , BOOST_VARIANT_AUX_DECLARE_PARAMS_IMPL \
+ , T \
+ ) \
+ /**/
+
+///////////////////////////////////////////////////////////////////////////////
+// class template variant (concept inspired by Andrei Alexandrescu)
+//
+// Efficient, type-safe bounded discriminated union.
+//
+// Preconditions:
+// - Each type must be unique.
+// - No type may be const-qualified.
+//
+// Proper declaration form:
+// variant<types> (where types is a type-sequence)
+// or
+// variant<T0,T1,...,Tn> (where T0 is NOT a type-sequence)
+//
+template < BOOST_VARIANT_AUX_DECLARE_PARAMS > class variant;
+
+///////////////////////////////////////////////////////////////////////////////
+// metafunction make_recursive_variant
+//
+// Exposes a boost::variant with recursive_variant_ tags (below) substituted
+// with the variant itself (wrapped as needed with boost::recursive_wrapper).
+//
+template < BOOST_VARIANT_AUX_DECLARE_PARAMS > struct make_recursive_variant;
+
+#undef BOOST_VARIANT_AUX_DECLARE_PARAMS_IMPL
+#undef BOOST_VARIANT_AUX_DECLARE_PARAMS
+
+///////////////////////////////////////////////////////////////////////////////
+// type recursive_variant_
+//
+// Tag type indicates where recursive variant substitution should occur.
+//
+#if !defined(BOOST_VARIANT_NO_FULL_RECURSIVE_VARIANT_SUPPORT)
+ struct recursive_variant_;
+#else
+ typedef mpl::arg<1> recursive_variant_;
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+// metafunction make_variant_over
+//
+// Result is a variant w/ types of the specified type sequence.
+//
+template <typename Types> struct make_variant_over;
+
+///////////////////////////////////////////////////////////////////////////////
+// metafunction make_recursive_variant_over
+//
+// Result is a recursive variant w/ types of the specified type sequence.
+//
+template <typename Types> struct make_recursive_variant_over;
+
+} // namespace boost
+
+#endif // BOOST_VARIANT_VARIANT_FWD_HPP
diff --git a/3rdParty/Boost/src/boost/variant/visitor_ptr.hpp b/3rdParty/Boost/src/boost/variant/visitor_ptr.hpp
new file mode 100644
index 0000000..b49a972
--- /dev/null
+++ b/3rdParty/Boost/src/boost/variant/visitor_ptr.hpp
@@ -0,0 +1,116 @@
+//-----------------------------------------------------------------------------
+// boost variant/visitor_ptr.hpp header file
+// See http://www.boost.org for updates, documentation, and revision history.
+//-----------------------------------------------------------------------------
+//
+// Copyright (c) 2002-2003
+// Eric Friedman
+//
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef BOOST_VARIANT_VISITOR_PTR_HPP
+#define BOOST_VARIANT_VISITOR_PTR_HPP
+
+#include "boost/variant/bad_visit.hpp"
+#include "boost/variant/static_visitor.hpp"
+
+#include "boost/mpl/eval_if.hpp"
+#include "boost/mpl/identity.hpp"
+#include "boost/type_traits/add_reference.hpp"
+#include "boost/type_traits/is_reference.hpp"
+#include "boost/type_traits/is_void.hpp"
+
+namespace boost {
+
+//////////////////////////////////////////////////////////////////////////
+// function template visitor_ptr
+//
+// Adapts a function pointer for use as visitor capable of handling
+// values of a single type. Throws bad_visit if inappropriately applied.
+//
+template <typename T, typename R>
+class visitor_ptr_t
+ : public static_visitor<R>
+{
+private: // representation
+
+ typedef R (*visitor_t)(T);
+
+ visitor_t visitor_;
+
+public: // typedefs
+
+ typedef R result_type;
+
+private: // private typedefs
+
+ typedef typename mpl::eval_if<
+ is_reference<T>
+ , mpl::identity<T>
+ , add_reference<const T>
+ >::type argument_fwd_type;
+
+public: // structors
+
+ explicit visitor_ptr_t(visitor_t visitor)
+ : visitor_(visitor)
+ {
+ }
+
+public: // static visitor interfaces
+
+ template <typename U>
+ result_type operator()(const U&) const
+ {
+ throw bad_visit();
+ }
+
+#if !defined(BOOST_NO_VOID_RETURNS)
+
+public: // static visitor interfaces, cont.
+
+ result_type operator()(argument_fwd_type operand) const
+ {
+ return visitor_(operand);
+ }
+
+#else // defined(BOOST_NO_VOID_RETURNS)
+
+private: // helpers, for static visitor interfaces (below)
+
+ result_type execute_impl(argument_fwd_type operand, mpl::false_) const
+ {
+ return visitor_(operand);
+ }
+
+ BOOST_VARIANT_AUX_RETURN_VOID_TYPE
+ execute_impl(argument_fwd_type operand, mpl::true_) const
+ {
+ visitor_(operand);
+ BOOST_VARIANT_AUX_RETURN_VOID;
+ }
+
+public: // static visitor interfaces, cont.
+
+ BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type)
+ operator()(argument_fwd_type operand) const
+ {
+ typedef typename is_void<result_type>::type has_void_result;
+ return execute_impl(operand, has_void_result());
+ }
+
+#endif // BOOST_NO_VOID_RETURNS workaround
+
+};
+
+template <typename R, typename T>
+inline visitor_ptr_t<T,R> visitor_ptr(R (*visitor)(T))
+{
+ return visitor_ptr_t<T,R>(visitor);
+}
+
+} // namespace boost
+
+#endif// BOOST_VISITOR_VISITOR_PTR_HPP
diff --git a/3rdParty/Boost/update.sh b/3rdParty/Boost/update.sh
index 81ac4e3..cd373e1 100755
--- a/3rdParty/Boost/update.sh
+++ b/3rdParty/Boost/update.sh
@@ -27,6 +27,7 @@ fi
uuid/uuid.hpp \
uuid/uuid_io.hpp \
uuid/uuid_generators.hpp \
+ variant.hpp \
regex.hpp \
$TARGET_DIR
diff --git a/Swiften/Base/String.h b/Swiften/Base/String.h
index 0958795..03d9029 100644
--- a/Swiften/Base/String.h
+++ b/Swiften/Base/String.h
@@ -36,6 +36,8 @@ namespace Swift {
size_t getUTF8Size() const { return data_.size(); }
std::vector<unsigned int> getUnicodeCodePoints() const;
+ void clear() { data_.clear(); }
+
/**
* Returns the part before and after 'c'.
* If the given splitter does not occur in the string, the second
diff --git a/Swiften/Elements/Command.h b/Swiften/Elements/Command.h
new file mode 100644
index 0000000..c802035
--- /dev/null
+++ b/Swiften/Elements/Command.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include "Swiften/Base/String.h"
+#include "Swiften/Elements/Payload.h"
+
+namespace Swift {
+ /**
+ * Ad-Hoc Command (XEP-0050).
+ */
+ class Command : public Payload {
+ public:
+ enum Status {Executing, Completed, Canceled, NoStatus};
+ enum Action {Cancel, Execute, Complete, Prev, Next, NoAction};
+
+ struct Note {
+ enum Type {Info, Warn, Error};
+
+ Note(String note, Type type) : note(note), type(type) {};
+
+ String note;
+ Type type;
+ };
+
+ public:
+ Command(const String& node, const String& sessionID, Status status) { constructor(node, sessionID, NoAction, status);}
+ Command(const String& node, const String& sessionID = "", Action action = Execute) { constructor(node, sessionID, action, NoStatus); }
+
+ const String& getNode() const { return node_; }
+ const String& getSessionID() const { return sessionID_; }
+ Action getPerformedAction() const { return performedAction_; }
+ void setExecuteAction(Action action) { executeAction_ = action; }
+ Action getExecuteAction() const { return executeAction_; }
+ Status getStatus() const { return status_; }
+ void addAvailableAction(Action action) { availableActions_.push_back(action); }
+ const std::vector<Action>& getAvailableActions() const { return availableActions_; }
+ void addNote(const Note& note) { notes_.push_back(note); }
+ const std::vector<Note>& getNotes() const { return notes_; }
+ boost::shared_ptr<Payload> getPayload() const { return payload_; }
+ void setPayload(boost::shared_ptr<Payload> payload) { payload_ = payload; }
+
+ private:
+ void constructor(const String& node, const String& sessionID, Action action, Status status) {
+ node_ = node;
+ sessionID_ = sessionID;
+ performedAction_ = action;
+ status_ = status;
+ executeAction_ = NoAction;
+ }
+
+ private:
+ String node_;
+ String sessionID_;
+ Action performedAction_;
+ Status status_;
+ Action executeAction_;
+ std::vector<Action> availableActions_;
+ std::vector<Note> notes_;
+ boost::shared_ptr<Payload> payload_;
+ };
+}
diff --git a/Swiften/Elements/Form.h b/Swiften/Elements/Form.h
new file mode 100644
index 0000000..ed77d2b
--- /dev/null
+++ b/Swiften/Elements/Form.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <vector>
+
+#include "Swiften/Elements/Payload.h"
+#include "Swiften/Elements/FormField.h"
+#include "Swiften/Base/String.h"
+#include "Swiften/JID/JID.h"
+
+namespace Swift {
+ /**
+ * XEP-0004 Data form.
+ * For the relevant Fields, the parsers and serialisers protect the API user against
+ * the strange multi-value instead of newline thing by transforming them.
+ */
+ class Form : public Payload {
+ public:
+ enum Type { FormType, SubmitType, CancelType, ResultType };
+
+ public:
+ Form(Type type = FormType) : type_(type) {}
+
+ void addField(boost::shared_ptr<FormField> field) { fields_.push_back(field); }
+ const std::vector<boost::shared_ptr<FormField> >& getFields() const { return fields_; }
+ void setTitle(const String& title) { title_ = title; }
+ const String& getTitle() { return title_; }
+
+ void setInstructions(const String& instructions) { instructions_ = instructions; }
+ const String& getInstructions() { return instructions_; }
+
+ Type getType() { return type_; }
+ void setType(Type type) { type_ = type; }
+
+ private:
+ std::vector<boost::shared_ptr<FormField> > fields_;
+ String title_;
+ String instructions_;
+ Type type_;
+ };
+}
diff --git a/Swiften/Elements/FormField.h b/Swiften/Elements/FormField.h
new file mode 100644
index 0000000..732203a
--- /dev/null
+++ b/Swiften/Elements/FormField.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include <vector>
+#include <boost/shared_ptr.hpp>
+
+#include "Swiften/Base/String.h"
+#include "Swiften/JID/JID.h"
+
+namespace Swift {
+ class FormField {
+ public:
+ typedef boost::shared_ptr<FormField> ref;
+
+ virtual ~FormField() {}
+
+ struct Option {
+ Option(const String& label, const String& value) : label(label), value(value) {}
+ String label;
+ String value;
+ };
+
+ void setName(const String& name) { this->name = name; }
+ const String& getName() const { return name; }
+
+ void setLabel(const String& label) { this->label = label; }
+ const String& getLabel() const { return label; }
+
+ void setDescription(const String& description) { this->description = description; }
+ const String& getDescription() const { return description; }
+
+ void setRequired(bool required) { this->required = required; }
+ bool getRequired() const { return required; }
+
+ void addOption(const Option& option) {
+ options.push_back(option);
+ }
+
+ const std::vector<Option>& getOptions() const {
+ return options;
+ }
+
+ protected:
+ FormField() : required(false) {}
+
+ private:
+ String name;
+ String label;
+ String description;
+ bool required;
+ std::vector<Option> options;
+ };
+
+ template<typename T> class GenericFormField : public FormField {
+ public:
+ const T& getValue() const {
+ return value;
+ }
+
+ void setValue(const T& value) {
+ this->value = value;
+ }
+
+ protected:
+ GenericFormField() {}
+ GenericFormField(const T& value) : value(value) {}
+
+ private:
+ T value;
+ };
+
+#define SWIFTEN_DECLARE_FORM_FIELD(name, valueType) \
+ class name##FormField : public GenericFormField< valueType > { \
+ public: \
+ typedef boost::shared_ptr<name##FormField> ref; \
+ static ref create(const valueType& value) { \
+ return ref(new name##FormField(value)); \
+ } \
+ static ref create() { \
+ return ref(new name##FormField()); \
+ } \
+ private: \
+ name##FormField(valueType value) : GenericFormField< valueType >(value) {} \
+ name##FormField() : GenericFormField< valueType >() {} \
+ };
+
+ SWIFTEN_DECLARE_FORM_FIELD(Boolean, bool);
+ SWIFTEN_DECLARE_FORM_FIELD(Fixed, String);
+ SWIFTEN_DECLARE_FORM_FIELD(Hidden, String);
+ SWIFTEN_DECLARE_FORM_FIELD(ListSingle, String);
+ SWIFTEN_DECLARE_FORM_FIELD(TextMulti, String);
+ SWIFTEN_DECLARE_FORM_FIELD(TextPrivate, String);
+ SWIFTEN_DECLARE_FORM_FIELD(TextSingle, String);
+ SWIFTEN_DECLARE_FORM_FIELD(JIDSingle, JID);
+ SWIFTEN_DECLARE_FORM_FIELD(JIDMulti, std::vector<JID>);
+ SWIFTEN_DECLARE_FORM_FIELD(ListMulti, std::vector<String>);
+}
diff --git a/Swiften/Parser/PayloadParsers/DiscoInfoParser.h b/Swiften/Parser/PayloadParsers/DiscoInfoParser.h
index f1502fc..925d349 100644
--- a/Swiften/Parser/PayloadParsers/DiscoInfoParser.h
+++ b/Swiften/Parser/PayloadParsers/DiscoInfoParser.h
@@ -4,8 +4,7 @@
* See Documentation/Licenses/GPLv3.txt for more information.
*/
-#ifndef SWIFTEN_DiscoInfoParser_H
-#define SWIFTEN_DiscoInfoParser_H
+#pragma once
#include "Swiften/Elements/DiscoInfo.h"
#include "Swiften/Parser/GenericPayloadParser.h"
@@ -27,5 +26,3 @@ namespace Swift {
int level_;
};
}
-
-#endif
diff --git a/Swiften/Parser/PayloadParsers/FormParser.cpp b/Swiften/Parser/PayloadParsers/FormParser.cpp
new file mode 100644
index 0000000..f08e7a3
--- /dev/null
+++ b/Swiften/Parser/PayloadParsers/FormParser.cpp
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include "Swiften/Parser/PayloadParsers/FormParser.h"
+
+namespace Swift {
+
+FormParser::FormParser() : level_(TopLevel) {
+}
+
+void FormParser::handleStartElement(const String& element, const String&, const AttributeMap& attributes) {
+ if (level_ == TopLevel) {
+ String type = attributes.getAttribute("type");
+ if (type == "form") {
+ getPayloadInternal()->setType(Form::FormType);
+ }
+ else if (type == "submit") {
+ getPayloadInternal()->setType(Form::SubmitType);
+ }
+ else if (type == "cancel") {
+ getPayloadInternal()->setType(Form::CancelType);
+ }
+ else if (type == "result") {
+ getPayloadInternal()->setType(Form::ResultType);
+ }
+ }
+ else if (level_ == PayloadLevel) {
+ if (element == "title") {
+ currentText_.clear();
+ }
+ else if (element == "instructions") {
+ currentText_.clear();
+ }
+ else if (element == "field") {
+ String type = attributes.getAttribute("type");
+ if (type == "boolean") {
+ currentFieldParseHelper_ = BooleanFormFieldParseHelper::create();
+ }
+ else if (type == "fixed") {
+ currentFieldParseHelper_ = FixedFormFieldParseHelper::create();
+ }
+ else if (type == "hidden") {
+ currentFieldParseHelper_ = HiddenFormFieldParseHelper::create();
+ }
+ else if (type == "jid-multi") {
+ currentFieldParseHelper_ = JIDMultiFormFieldParseHelper::create();
+ }
+ else if (type == "jid-single") {
+ currentFieldParseHelper_ = JIDSingleFormFieldParseHelper::create();
+ }
+ else if (type == "list-multi") {
+ currentFieldParseHelper_ = ListMultiFormFieldParseHelper::create();
+ }
+ else if (type == "list-single") {
+ currentFieldParseHelper_ = ListSingleFormFieldParseHelper::create();
+ }
+ else if (type == "text-multi") {
+ currentFieldParseHelper_ = TextMultiFormFieldParseHelper::create();
+ }
+ else if (type == "text-private") {
+ currentFieldParseHelper_ = TextPrivateFormFieldParseHelper::create();
+ }
+ else if (type == "text-single") {
+ currentFieldParseHelper_ = TextSingleFormFieldParseHelper::create();
+ }
+ if (currentFieldParseHelper_) {
+ currentFieldParseHelper_->getField()->setName(attributes.getAttribute("var"));
+ currentFieldParseHelper_->getField()->setLabel(attributes.getAttribute("label"));
+ }
+ }
+ }
+ else if (level_ == FieldLevel && currentFieldParseHelper_) {
+ currentText_.clear();
+ if (element == "option") {
+ currentOptionLabel_ = attributes.getAttribute("label");
+ }
+ }
+ ++level_;
+}
+
+void FormParser::handleEndElement(const String& element, const String&) {
+ --level_;
+ if (level_ == PayloadLevel) {
+ if (element == "title") {
+ String currentTitle = getPayloadInternal()->getTitle();
+ if (currentTitle.isEmpty()) {
+ getPayloadInternal()->setTitle(currentText_);
+ }
+ else {
+ getPayloadInternal()->setTitle(currentTitle + "\n" + currentText_);
+ }
+ }
+ else if (element == "instructions") {
+ String currentInstructions = getPayloadInternal()->getInstructions();
+ if (currentInstructions.isEmpty()) {
+ getPayloadInternal()->setInstructions(currentText_);
+ }
+ else {
+ getPayloadInternal()->setInstructions(currentInstructions + "\n" + currentText_);
+ }
+ }
+ else if (element == "field") {
+ if (currentFieldParseHelper_) {
+ getPayloadInternal()->addField(currentFieldParseHelper_->getField());
+ currentFieldParseHelper_.reset();
+ }
+ }
+ }
+ else if (level_ == FieldLevel && currentFieldParseHelper_) {
+ if (element == "required") {
+ currentFieldParseHelper_->getField()->setRequired(true);
+ }
+ else if (element == "desc") {
+ currentFieldParseHelper_->getField()->setDescription(currentText_);
+ }
+ else if (element == "option") {
+ currentFieldParseHelper_->getField()->addOption(FormField::Option(currentOptionLabel_, currentText_));
+ }
+ else if (element == "value") {
+ currentFieldParseHelper_->addValue(currentText_);
+ }
+ }
+}
+
+void FormParser::handleCharacterData(const String& text) {
+ currentText_ += text;
+}
+
+}
diff --git a/Swiften/Parser/PayloadParsers/FormParser.h b/Swiften/Parser/PayloadParsers/FormParser.h
new file mode 100644
index 0000000..76a54b9
--- /dev/null
+++ b/Swiften/Parser/PayloadParsers/FormParser.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include "Swiften/Elements/Form.h"
+#include "Swiften/Parser/GenericPayloadParser.h"
+
+namespace Swift {
+ class FormParser : public GenericPayloadParser<Form> {
+ public:
+ FormParser();
+
+ virtual void handleStartElement(const String& element, const String&, const AttributeMap& attributes);
+ virtual void handleEndElement(const String& element, const String&);
+ virtual void handleCharacterData(const String& data);
+
+ private:
+ class FieldParseHelper {
+ public:
+ virtual ~FieldParseHelper() {}
+ virtual void addValue(const String&) = 0;
+ virtual boost::shared_ptr<FormField> getField() const {
+ return field;
+ }
+ protected:
+ boost::shared_ptr<FormField> field;
+ };
+ class BoolFieldParseHelper : public FieldParseHelper {
+ virtual void addValue(const String& s) {
+ boost::dynamic_pointer_cast< GenericFormField<bool> >(getField())->setValue(s == "1" || s == "true");
+ }
+ };
+ class StringFieldParseHelper : public FieldParseHelper {
+ virtual void addValue(const String& s) {
+ boost::shared_ptr<GenericFormField<String> > field = boost::dynamic_pointer_cast< GenericFormField<String> >(getField());
+ if (field->getValue().isEmpty()) {
+ field->setValue(s);
+ }
+ else {
+ field->setValue(field->getValue() + "\n" + s);
+ }
+ }
+ };
+ class JIDFieldParseHelper : public FieldParseHelper {
+ virtual void addValue(const String& s) {
+ boost::dynamic_pointer_cast< GenericFormField<JID> >(getField())->setValue(JID(s));
+ }
+ };
+ class StringListFieldParseHelper : public FieldParseHelper {
+ virtual void addValue(const String& s) {
+ // FIXME: Inefficient, but too much hassle to do efficiently
+ boost::shared_ptr<GenericFormField< std::vector<String> > > field = boost::dynamic_pointer_cast< GenericFormField<std::vector<String > > >(getField());
+ std::vector<String> l = field->getValue();
+ l.push_back(s);
+ field->setValue(l);
+ }
+ };
+ class JIDListFieldParseHelper : public FieldParseHelper {
+ virtual void addValue(const String& s) {
+ // FIXME: Inefficient, but too much hassle to do efficiently
+ boost::shared_ptr< GenericFormField< std::vector<JID> > > field = boost::dynamic_pointer_cast< GenericFormField<std::vector<JID > > >(getField());
+ std::vector<JID> l = field->getValue();
+ l.push_back(JID(s));
+ field->setValue(l);
+ }
+ };
+
+#define SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(name, baseParser) \
+ class name##FormFieldParseHelper : public baseParser##FieldParseHelper { \
+ public: \
+ typedef boost::shared_ptr<name##FormFieldParseHelper> ref; \
+ static ref create() { \
+ return ref(new name##FormFieldParseHelper()); \
+ } \
+ private: \
+ name##FormFieldParseHelper() : baseParser##FieldParseHelper() { \
+ field = name##FormField::create(); \
+ } \
+ };
+
+ SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(Boolean, Bool);
+ SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(Fixed, String);
+ SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(Hidden, String);
+ SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(ListSingle, String);
+ SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(TextMulti, String);
+ SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(TextPrivate, String);
+ SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(TextSingle, String);
+ SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(JIDSingle, JID);
+ SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(JIDMulti, JIDList);
+ SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(ListMulti, StringList);
+
+ enum Level {
+ TopLevel = 0,
+ PayloadLevel = 1,
+ FieldLevel = 2
+ };
+ int level_;
+ String currentText_;
+ String currentOptionLabel_;
+ boost::shared_ptr<FieldParseHelper> currentFieldParseHelper_;
+ };
+}
diff --git a/Swiften/Parser/PayloadParsers/FormParserFactory.h b/Swiften/Parser/PayloadParsers/FormParserFactory.h
new file mode 100644
index 0000000..805b0f1
--- /dev/null
+++ b/Swiften/Parser/PayloadParsers/FormParserFactory.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include "Swiften/Parser/PayloadParserFactory.h"
+#include "Swiften/Parser/PayloadParsers/FormParser.h"
+
+namespace Swift {
+ class PayloadParserFactoryCollection;
+
+ class FormParserFactory : public PayloadParserFactory {
+ public:
+ FormParserFactory() {
+ }
+
+ virtual bool canParse(const String& /*element*/, const String& ns, const AttributeMap&) const {
+ return ns == "jabber:x:data";
+ }
+
+ virtual PayloadParser* createPayloadParser() {
+ return new FormParser();
+ }
+
+ };
+}
diff --git a/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp b/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp
index eace3d1..b115b10 100644
--- a/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp
+++ b/Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.cpp
@@ -24,6 +24,7 @@
#include "Swiften/Parser/PayloadParsers/DiscoItemsParserFactory.h"
#include "Swiften/Parser/PayloadParsers/SecurityLabelParserFactory.h"
#include "Swiften/Parser/PayloadParsers/SecurityLabelsCatalogParserFactory.h"
+#include "Swiften/Parser/PayloadParsers/FormParserFactory.h"
#include "Swiften/Parser/PayloadParsers/VCardUpdateParserFactory.h"
#include "Swiften/Parser/PayloadParsers/VCardParserFactory.h"
#include "Swiften/Parser/PayloadParsers/RawXMLPayloadParserFactory.h"
@@ -51,6 +52,7 @@ FullPayloadParserFactoryCollection::FullPayloadParserFactoryCollection() {
factories_.push_back(shared_ptr<PayloadParserFactory>(new StartSessionParserFactory()));
factories_.push_back(shared_ptr<PayloadParserFactory>(new SecurityLabelParserFactory()));
factories_.push_back(shared_ptr<PayloadParserFactory>(new SecurityLabelsCatalogParserFactory()));
+ factories_.push_back(shared_ptr<PayloadParserFactory>(new FormParserFactory()));
factories_.push_back(shared_ptr<PayloadParserFactory>(new VCardUpdateParserFactory()));
factories_.push_back(shared_ptr<PayloadParserFactory>(new VCardParserFactory()));
factories_.push_back(shared_ptr<PayloadParserFactory>(new PrivateStorageParserFactory(this)));
diff --git a/Swiften/Parser/PayloadParsers/UnitTest/FormParserTest.cpp b/Swiften/Parser/PayloadParsers/UnitTest/FormParserTest.cpp
new file mode 100644
index 0000000..e7d80e3
--- /dev/null
+++ b/Swiften/Parser/PayloadParsers/UnitTest/FormParserTest.cpp
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+
+#include "Swiften/Parser/PayloadParsers/FormParser.h"
+#include "Swiften/Parser/PayloadParsers/UnitTest/PayloadsParserTester.h"
+
+using namespace Swift;
+
+class FormParserTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(FormParserTest);
+ CPPUNIT_TEST(testParse_FormInformation);
+ CPPUNIT_TEST(testParse);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+ void testParse_FormInformation() {
+ PayloadsParserTester parser;
+
+ CPPUNIT_ASSERT(parser.parse(
+ "<x type=\"submit\" xmlns=\"jabber:x:data\">"
+ "<title>Bot Configuration</title>"
+ "<instructions>Hello!</instructions>"
+ "<instructions>Fill out this form to configure your new bot!</instructions>"
+ "</x>"
+ ));
+
+ Form* payload = dynamic_cast<Form*>(parser.getPayload().get());
+ CPPUNIT_ASSERT_EQUAL(String("Bot Configuration"), payload->getTitle());
+ CPPUNIT_ASSERT_EQUAL(String("Hello!\nFill out this form to configure your new bot!"), payload->getInstructions());
+ CPPUNIT_ASSERT_EQUAL(Form::SubmitType, payload->getType());
+ }
+
+ void testParse() {
+ PayloadsParserTester parser;
+
+ CPPUNIT_ASSERT(parser.parse(
+ "<x type=\"form\" xmlns=\"jabber:x:data\">"
+ "<field type=\"hidden\" var=\"FORM_TYPE\">"
+ "<value>jabber:bot</value>"
+ "</field>"
+ "<field type=\"fixed\"><value>Section 1: Bot Info</value></field>"
+ "<field label=\"The name of your bot\" type=\"text-single\" var=\"botname\"/>"
+ "<field label=\"Helpful description of your bot\" type=\"text-multi\" var=\"description\"><value>This is a bot.</value><value>A quite good one actually</value></field>"
+ "<field label=\"Public bot?\" type=\"boolean\" var=\"public\">"
+ "<required/>"
+ "<value>1</value>"
+ "</field>"
+ "<field label=\"Password for special access\" type=\"text-private\" var=\"password\"/>"
+ "<field label=\"What features will the bot support?\" type=\"list-multi\" var=\"features\">"
+ "<value>news</value>"
+ "<value>search</value>"
+ "<option label=\"Contests\"><value>contests</value></option>"
+ "<option label=\"News\"><value>news</value></option>"
+ "<option label=\"Polls\"><value>polls</value></option>"
+ "<option label=\"Reminders\"><value>reminders</value></option>"
+ "<option label=\"Search\"><value>search</value></option>"
+ "</field>"
+ "<field label=\"Maximum number of subscribers\" type=\"list-single\" var=\"maxsubs\">"
+ "<value>20</value>"
+ "<option label=\"10\"><value>10</value></option>"
+ "<option label=\"20\"><value>20</value></option>"
+ "<option label=\"30\"><value>30</value></option>"
+ "<option label=\"50\"><value>50</value></option>"
+ "<option label=\"100\"><value>100</value></option>"
+ "<option label=\"None\"><value>none</value></option>"
+ "</field>"
+ "<field label=\"People to invite\" type=\"jid-multi\" var=\"invitelist\">"
+ "<desc>Tell all your friends about your new bot!</desc>"
+ "<value>foo@bar.com</value>"
+ "<value>baz@fum.org</value>"
+ "</field>"
+ "</x>"));
+
+ Form* payload = dynamic_cast<Form*>(parser.getPayload().get());
+
+ CPPUNIT_ASSERT_EQUAL(9, static_cast<int>(payload->getFields().size()));
+ CPPUNIT_ASSERT_EQUAL(String("jabber:bot"), boost::dynamic_pointer_cast<HiddenFormField>(payload->getFields()[0])->getValue());
+ CPPUNIT_ASSERT_EQUAL(String("FORM_TYPE"), payload->getFields()[0]->getName());
+ CPPUNIT_ASSERT(!payload->getFields()[0]->getRequired());
+
+ CPPUNIT_ASSERT_EQUAL(String("Section 1: Bot Info"), boost::dynamic_pointer_cast<FixedFormField>(payload->getFields()[1])->getValue());
+
+ CPPUNIT_ASSERT_EQUAL(String("The name of your bot"), payload->getFields()[2]->getLabel());
+
+ CPPUNIT_ASSERT_EQUAL(String("This is a bot.\nA quite good one actually"), boost::dynamic_pointer_cast<TextMultiFormField>(payload->getFields()[3])->getValue());
+
+ CPPUNIT_ASSERT_EQUAL(true, boost::dynamic_pointer_cast<BooleanFormField>(payload->getFields()[4])->getValue());
+ CPPUNIT_ASSERT(payload->getFields()[4]->getRequired());
+
+ CPPUNIT_ASSERT_EQUAL(String("news"), boost::dynamic_pointer_cast<ListMultiFormField>(payload->getFields()[6])->getValue()[0]);
+ CPPUNIT_ASSERT_EQUAL(String("search"), boost::dynamic_pointer_cast<ListMultiFormField>(payload->getFields()[6])->getValue()[1]);
+ CPPUNIT_ASSERT_EQUAL(5, static_cast<int>(payload->getFields()[6]->getOptions().size()));
+ CPPUNIT_ASSERT_EQUAL(String("Contests"), payload->getFields()[6]->getOptions()[0].label);
+ CPPUNIT_ASSERT_EQUAL(String("contests"), payload->getFields()[6]->getOptions()[0].value);
+ CPPUNIT_ASSERT_EQUAL(String("News"), payload->getFields()[6]->getOptions()[1].label);
+ CPPUNIT_ASSERT_EQUAL(String("news"), payload->getFields()[6]->getOptions()[1].value);
+
+ CPPUNIT_ASSERT_EQUAL(String("20"), boost::dynamic_pointer_cast<ListSingleFormField>(payload->getFields()[7])->getValue());
+
+ CPPUNIT_ASSERT_EQUAL(JID("foo@bar.com"), boost::dynamic_pointer_cast<JIDMultiFormField>(payload->getFields()[8])->getValue()[0]);
+ CPPUNIT_ASSERT_EQUAL(JID("baz@fum.org"), boost::dynamic_pointer_cast<JIDMultiFormField>(payload->getFields()[8])->getValue()[1]);
+ CPPUNIT_ASSERT_EQUAL(String("Tell all your friends about your new bot!"), payload->getFields()[8]->getDescription());
+ }
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(FormParserTest);
diff --git a/Swiften/Parser/SConscript b/Swiften/Parser/SConscript
index 7b64ee3..1826432 100644
--- a/Swiften/Parser/SConscript
+++ b/Swiften/Parser/SConscript
@@ -23,6 +23,7 @@ sources = [
"PayloadParsers/DiscoInfoParser.cpp",
"PayloadParsers/DiscoItemsParser.cpp",
"PayloadParsers/ErrorParser.cpp",
+ "PayloadParsers/FormParser.cpp",
"PayloadParsers/FullPayloadParserFactoryCollection.cpp",
"PayloadParsers/PriorityParser.cpp",
"PayloadParsers/PrivateStorageParser.cpp",
diff --git a/Swiften/SConscript b/Swiften/SConscript
index 33a1a7e..f44d9a3 100644
--- a/Swiften/SConscript
+++ b/Swiften/SConscript
@@ -87,6 +87,8 @@ if env["SCONS_STAGE"] == "build" :
"Serializer/PayloadSerializers/StorageSerializer.cpp",
"Serializer/PayloadSerializers/PrivateStorageSerializer.cpp",
"Serializer/PayloadSerializers/DelaySerializer.cpp",
+ "Serializer/PayloadSerializers/CommandSerializer.cpp",
+ "Serializer/PayloadSerializers/FormSerializer.cpp",
"Serializer/PresenceSerializer.cpp",
"Serializer/StanzaSerializer.cpp",
"Serializer/StreamFeaturesSerializer.cpp",
@@ -164,6 +166,7 @@ if env["SCONS_STAGE"] == "build" :
File("Parser/PayloadParsers/UnitTest/BodyParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/DiscoInfoParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/ErrorParserTest.cpp"),
+ File("Parser/PayloadParsers/UnitTest/FormParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/RawXMLPayloadParserTest.cpp"),
File("Parser/PayloadParsers/UnitTest/ResourceBindParserTest.cpp"),
@@ -199,6 +202,7 @@ if env["SCONS_STAGE"] == "build" :
File("Roster/UnitTest/XMPPRosterTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/PayloadsSerializer.cpp"),
File("Serializer/PayloadSerializers/UnitTest/CapsInfoSerializerTest.cpp"),
+ File("Serializer/PayloadSerializers/UnitTest/FormSerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/DiscoInfoSerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/ErrorSerializerTest.cpp"),
File("Serializer/PayloadSerializers/UnitTest/PrioritySerializerTest.cpp"),
diff --git a/Swiften/Serializer/PayloadSerializers/CommandSerializer.cpp b/Swiften/Serializer/PayloadSerializers/CommandSerializer.cpp
new file mode 100644
index 0000000..3ac0c2c
--- /dev/null
+++ b/Swiften/Serializer/PayloadSerializers/CommandSerializer.cpp
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include "Swiften/Serializer/PayloadSerializers/CommandSerializer.h"
+
+#include <boost/shared_ptr.hpp>
+
+#include "Swiften/Base/foreach.h"
+#include "Swiften/Serializer/XML/XMLElement.h"
+#include "Swiften/Serializer/XML/XMLTextNode.h"
+#include "Swiften/Serializer/XML/XMLRawTextNode.h"
+#include "Swiften/Serializer/PayloadSerializerCollection.h"
+
+namespace Swift {
+
+CommandSerializer::CommandSerializer(PayloadSerializerCollection* serializers) : serializers(serializers) {
+}
+
+String CommandSerializer::serializePayload(boost::shared_ptr<Command> command) const {
+ XMLElement commandElement("command", "http://jabber.org/protocol/comands");
+ commandElement.setAttribute("node", command->getNode());
+
+ if (!command->getSessionID().isEmpty()) {
+ commandElement.setAttribute("sessionid", command->getSessionID());
+ }
+
+ String action = actionToString(command->getPerformedAction());
+ if (!action.isEmpty()) {
+ commandElement.setAttribute("action", action);
+ }
+
+ String status;
+ switch (command->getStatus()) {
+ case Command::Executing: status = "executing";break;
+ case Command::Completed: status = "completed";break;
+ case Command::Canceled: status = "canceled";break;
+ case Command::NoStatus: break;
+ }
+ if (!status.isEmpty()) {
+ commandElement.setAttribute("status", status);
+ }
+
+ if (command->getAvailableActions().size() > 0) {
+ String actions = "<actions";
+ String executeAction = actionToString(command->getExecuteAction());
+ if (!executeAction.isEmpty()) {
+ actions += " execute='" + executeAction + "'";
+ }
+ actions += ">";
+ foreach (Command::Action action, command->getAvailableActions()) {
+ actions += "<" + actionToString(action) + "/>";
+ }
+ actions += "</actions>";
+ commandElement.addNode(boost::shared_ptr<XMLRawTextNode>(new XMLRawTextNode(actions)));
+ }
+
+ foreach (Command::Note note, command->getNotes()) {
+ boost::shared_ptr<XMLElement> noteElement(new XMLElement("note"));
+ String type;
+ switch (note.type) {
+ case Command::Note::Info: type = "info";
+ case Command::Note::Warn: type = "warn";
+ case Command::Note::Error: type = "error";
+ }
+ if (!type.isEmpty()) {
+ noteElement->setAttribute("type", type);
+ }
+ noteElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(note.note)));
+ commandElement.addNode(noteElement);
+ }
+
+ boost::shared_ptr<Payload> payload = command->getPayload();
+ if (payload) {
+ PayloadSerializer* serializer = serializers->getPayloadSerializer(payload);
+ if (serializer) {
+ commandElement.addNode(boost::shared_ptr<XMLRawTextNode>(new XMLRawTextNode(serializer->serialize(payload))));
+ }
+ }
+ return commandElement.serialize();
+}
+
+String CommandSerializer::actionToString(Command::Action action) const {
+ String string;
+ switch (action) {
+ case Command::Cancel: string = "cancel"; break;
+ case Command::Execute: string = "execute"; break;
+ case Command::Complete: string = "complete"; break;
+ case Command::Prev: string = "prev"; break;
+ case Command::Next: string = "next"; break;
+ case Command::NoAction: break;
+ }
+ return string;
+}
+
+}
diff --git a/Swiften/Serializer/PayloadSerializers/CommandSerializer.h b/Swiften/Serializer/PayloadSerializers/CommandSerializer.h
new file mode 100644
index 0000000..6a0c067
--- /dev/null
+++ b/Swiften/Serializer/PayloadSerializers/CommandSerializer.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include "Swiften/Serializer/GenericPayloadSerializer.h"
+#include "Swiften/Elements/Command.h"
+
+namespace Swift {
+ class PayloadSerializerCollection;
+
+ class CommandSerializer : public GenericPayloadSerializer<Command> {
+ public:
+ CommandSerializer(PayloadSerializerCollection* serializers);
+
+ virtual String serializePayload(boost::shared_ptr<Command>) const;
+
+ private:
+ PayloadSerializerCollection* serializers;
+ String actionToString(Command::Action action) const;
+ };
+}
diff --git a/Swiften/Serializer/PayloadSerializers/FormSerializer.cpp b/Swiften/Serializer/PayloadSerializers/FormSerializer.cpp
new file mode 100644
index 0000000..e82f2d0
--- /dev/null
+++ b/Swiften/Serializer/PayloadSerializers/FormSerializer.cpp
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include "Swiften/Serializer/PayloadSerializers/FormSerializer.h"
+
+#include <boost/shared_ptr.hpp>
+#include <iostream>
+
+#include "Swiften/Base/foreach.h"
+#include "Swiften/Base/String.h"
+#include "Swiften/Serializer/XML/XMLTextNode.h"
+#include "Swiften/Serializer/XML/XMLRawTextNode.h"
+
+using namespace Swift;
+
+namespace {
+ template<typename T> void serializeValueAsString(boost::shared_ptr<FormField> field, boost::shared_ptr<XMLElement> parent) {
+ String value = boost::dynamic_pointer_cast<T>(field)->getValue();
+ if (!value.isEmpty()) {
+ boost::shared_ptr<XMLElement> valueElement(new XMLElement("value"));
+ valueElement->addNode(XMLTextNode::create(value));
+ parent->addNode(valueElement);
+ }
+ }
+}
+
+
+namespace Swift {
+
+FormSerializer::FormSerializer() : GenericPayloadSerializer<Form>() {
+}
+
+String FormSerializer::serializePayload(boost::shared_ptr<Form> form) const {
+ boost::shared_ptr<XMLElement> formElement(new XMLElement("x", "jabber:x:data"));
+ String type;
+ switch (form->getType()) {
+ case Form::FormType: type = "form"; break;
+ case Form::SubmitType: type = "submit"; break;
+ case Form::CancelType: type = "cancel"; break;
+ case Form::ResultType: type = "result"; break;
+ }
+ formElement->setAttribute("type", type);
+ if (!form->getTitle().isEmpty()) {
+ multiLineify(form->getTitle(), "title", formElement);
+ }
+ if (!form->getInstructions().isEmpty()) {
+ multiLineify(form->getInstructions(), "instructions", formElement);
+ }
+ foreach(boost::shared_ptr<FormField> field, form->getFields()) {
+ formElement->addNode(fieldToXML(field));
+ }
+ return formElement->serialize();
+}
+
+boost::shared_ptr<XMLElement> FormSerializer::fieldToXML(boost::shared_ptr<FormField> field) const {
+ boost::shared_ptr<XMLElement> fieldElement(new XMLElement("field"));
+ if (!field->getName().isEmpty()) {
+ fieldElement->setAttribute("var", field->getName());
+ }
+ if (!field->getLabel().isEmpty()) {
+ fieldElement->setAttribute("label", field->getLabel());
+ }
+ if (field->getRequired()) {
+ fieldElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("required")));
+ }
+ if (!field->getDescription().isEmpty()) {
+ boost::shared_ptr<XMLElement> descriptionElement(new XMLElement("desc"));
+ descriptionElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(field->getDescription())));
+ fieldElement->addNode(descriptionElement);
+ }
+
+ // Set the value and type
+ String fieldType;
+ if (boost::dynamic_pointer_cast<BooleanFormField>(field)) {
+ fieldType = "boolean";
+ boost::shared_ptr<XMLElement> valueElement(new XMLElement("value"));
+ valueElement->addNode(XMLTextNode::create(boost::dynamic_pointer_cast<BooleanFormField>(field)->getValue() ? "1" : "0"));
+ fieldElement->addNode(valueElement);
+ }
+ else if (boost::dynamic_pointer_cast<FixedFormField>(field)) {
+ fieldType = "fixed";
+ serializeValueAsString<FixedFormField>(field, fieldElement);
+ }
+ else if (boost::dynamic_pointer_cast<HiddenFormField>(field)) {
+ fieldType = "hidden";
+ serializeValueAsString<HiddenFormField>(field, fieldElement);
+ }
+ else if (boost::dynamic_pointer_cast<ListSingleFormField>(field)) {
+ fieldType = "list-single";
+ serializeValueAsString<ListSingleFormField>(field, fieldElement);
+ }
+ else if (boost::dynamic_pointer_cast<TextPrivateFormField>(field)) {
+ fieldType = "text-private";
+ serializeValueAsString<TextPrivateFormField>(field, fieldElement);
+ }
+ else if (boost::dynamic_pointer_cast<TextSingleFormField>(field)) {
+ fieldType = "text-single";
+ serializeValueAsString<TextSingleFormField>(field, fieldElement);
+ }
+ else if (boost::dynamic_pointer_cast<JIDMultiFormField>(field)) {
+ fieldType = "jid-multi";
+ std::vector<JID> jids = boost::dynamic_pointer_cast<JIDMultiFormField>(field)->getValue();
+ foreach(const JID& jid, jids) {
+ boost::shared_ptr<XMLElement> valueElement(new XMLElement("value"));
+ valueElement->addNode(XMLTextNode::create(jid.toString()));
+ fieldElement->addNode(valueElement);
+ }
+ }
+ else if (boost::dynamic_pointer_cast<JIDSingleFormField>(field)) {
+ fieldType = "jid-single";
+ boost::shared_ptr<XMLElement> valueElement(new XMLElement("value"));
+ valueElement->addNode(XMLTextNode::create(boost::dynamic_pointer_cast<JIDSingleFormField>(field)->getValue().toString()));
+ fieldElement->addNode(valueElement);
+ }
+ else if (boost::dynamic_pointer_cast<ListMultiFormField>(field)) {
+ fieldType = "list-multi";
+ std::vector<String> lines = boost::dynamic_pointer_cast<ListMultiFormField>(field)->getValue();
+ foreach(const String& line, lines) {
+ boost::shared_ptr<XMLElement> valueElement(new XMLElement("value"));
+ valueElement->addNode(XMLTextNode::create(line));
+ fieldElement->addNode(valueElement);
+ }
+ }
+ else if (boost::dynamic_pointer_cast<TextMultiFormField>(field)) {
+ fieldType = "text-multi";
+ multiLineify(boost::dynamic_pointer_cast<TextMultiFormField>(field)->getValue(), "value", fieldElement);
+ }
+ else {
+ assert(false);
+ }
+ fieldElement->setAttribute("type", fieldType);
+
+ foreach (const FormField::Option& option, field->getOptions()) {
+ boost::shared_ptr<XMLElement> optionElement(new XMLElement("option"));
+ optionElement->setAttribute("label", option.label);
+
+ boost::shared_ptr<XMLElement> valueElement(new XMLElement("value"));
+ valueElement->addNode(XMLTextNode::create(option.value));
+ optionElement->addNode(valueElement);
+
+ fieldElement->addNode(optionElement);
+ }
+
+ return fieldElement;
+}
+
+void FormSerializer::multiLineify(const String& text, const String& elementName, boost::shared_ptr<XMLElement> element) const {
+ String unRdText(text);
+ unRdText.removeAll('\r');
+ std::vector<String> lines = unRdText.split('\n');
+ foreach (String line, lines) {
+ boost::shared_ptr<XMLElement> lineElement(new XMLElement(elementName));
+ lineElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(line)));
+ element->addNode(lineElement);
+ }
+}
+
+}
diff --git a/Swiften/Serializer/PayloadSerializers/FormSerializer.h b/Swiften/Serializer/PayloadSerializers/FormSerializer.h
new file mode 100644
index 0000000..1cdc7f2
--- /dev/null
+++ b/Swiften/Serializer/PayloadSerializers/FormSerializer.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2010 Kevin Smith
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#pragma once
+
+#include "Swiften/Serializer/GenericPayloadSerializer.h"
+#include "Swiften/Elements/Form.h"
+#include "Swiften/Elements/FormField.h"
+#include "Swiften/Serializer/XML/XMLElement.h"
+
+namespace Swift {
+ class FormSerializer : public GenericPayloadSerializer<Form> {
+ public:
+ FormSerializer();
+
+ virtual String serializePayload(boost::shared_ptr<Form>) const;
+
+ private:
+ boost::shared_ptr<XMLElement> fieldToXML(boost::shared_ptr<FormField> field) const;
+ void multiLineify(const String& text, const String& elementName, boost::shared_ptr<XMLElement> parent) const;
+ };
+}
+
+
diff --git a/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp b/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp
index 39e7d5b..04615a2 100644
--- a/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp
+++ b/Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.cpp
@@ -31,6 +31,8 @@
#include "Swiften/Serializer/PayloadSerializers/StorageSerializer.h"
#include "Swiften/Serializer/PayloadSerializers/PrivateStorageSerializer.h"
#include "Swiften/Serializer/PayloadSerializers/DelaySerializer.h"
+#include "Swiften/Serializer/PayloadSerializers/FormSerializer.h"
+#include "Swiften/Serializer/PayloadSerializers/CommandSerializer.h"
namespace Swift {
@@ -57,7 +59,9 @@ FullPayloadSerializerCollection::FullPayloadSerializerCollection() {
serializers_.push_back(new RawXMLPayloadSerializer());
serializers_.push_back(new StorageSerializer());
serializers_.push_back(new DelaySerializer());
+ serializers_.push_back(new FormSerializer());
serializers_.push_back(new PrivateStorageSerializer(this));
+ serializers_.push_back(new CommandSerializer(this));
foreach(PayloadSerializer* serializer, serializers_) {
addSerializer(serializer);
}
diff --git a/Swiften/Serializer/PayloadSerializers/UnitTest/FormSerializerTest.cpp b/Swiften/Serializer/PayloadSerializers/UnitTest/FormSerializerTest.cpp
new file mode 100644
index 0000000..0d98dea
--- /dev/null
+++ b/Swiften/Serializer/PayloadSerializers/UnitTest/FormSerializerTest.cpp
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2010 Remko Tronçon
+ * Licensed under the GNU General Public License v3.
+ * See Documentation/Licenses/GPLv3.txt for more information.
+ */
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+
+#include "Swiften/Serializer/PayloadSerializers/FormSerializer.h"
+
+using namespace Swift;
+
+class FormSerializerTest : public CppUnit::TestFixture {
+ CPPUNIT_TEST_SUITE(FormSerializerTest);
+ CPPUNIT_TEST(testSerializeFormInformation);
+ CPPUNIT_TEST(testSerializeFields);
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+ void testSerializeFormInformation() {
+ FormSerializer testling;
+ boost::shared_ptr<Form> form(new Form(Form::FormType));
+ form->setTitle("Bot Configuration");
+ form->setInstructions("Hello!\nFill out this form to configure your new bot!");
+
+ CPPUNIT_ASSERT_EQUAL(String(
+ "<x type=\"form\" xmlns=\"jabber:x:data\">"
+ "<title>Bot Configuration</title>"
+ "<instructions>Hello!</instructions>"
+ "<instructions>Fill out this form to configure your new bot!</instructions>"
+ "</x>"), testling.serialize(form));
+ }
+
+ void testSerializeFields() {
+ FormSerializer testling;
+ boost::shared_ptr<Form> form(new Form(Form::FormType));
+
+ FormField::ref field = HiddenFormField::create("jabber:bot");
+ field->setName("FORM_TYPE");
+ form->addField(field);
+
+ form->addField(FixedFormField::create("Section 1: Bot Info"));
+
+ field = TextSingleFormField::create();
+ field->setName("botname");
+ field->setLabel("The name of your bot");
+ form->addField(field);
+
+ field = TextMultiFormField::create("This is a bot.\nA quite good one actually");
+ field->setName("description");
+ field->setLabel("Helpful description of your bot");
+ form->addField(field);
+
+ field = BooleanFormField::create(true);
+ field->setName("public");
+ field->setLabel("Public bot?");
+ field->setRequired(true);
+ form->addField(field);
+
+ field = TextPrivateFormField::create();
+ field->setName("password");
+ field->setLabel("Password for special access");
+ form->addField(field);
+
+ std::vector<String> values;
+ values.push_back("news");
+ values.push_back("search");
+ field = ListMultiFormField::create(values);
+ field->setName("features");
+ field->setLabel("What features will the bot support?");
+ field->addOption(FormField::Option("Contests", "contests"));
+ field->addOption(FormField::Option("News", "news"));
+ field->addOption(FormField::Option("Polls", "polls"));
+ field->addOption(FormField::Option("Reminders", "reminders"));
+ field->addOption(FormField::Option("Search", "search"));
+ form->addField(field);
+
+ field = ListSingleFormField::create("20");
+ field->setName("maxsubs");
+ field->setLabel("Maximum number of subscribers");
+ field->addOption(FormField::Option("10", "10"));
+ field->addOption(FormField::Option("20", "20"));
+ field->addOption(FormField::Option("30", "30"));
+ field->addOption(FormField::Option("50", "50"));
+ field->addOption(FormField::Option("100", "100"));
+ field->addOption(FormField::Option("None", "none"));
+ form->addField(field);
+
+ std::vector<JID> jids;
+ jids.push_back(JID("foo@bar.com"));
+ jids.push_back(JID("baz@fum.org"));
+ field = JIDMultiFormField::create(jids);
+ field->setName("invitelist");
+ field->setLabel("People to invite");
+ field->setDescription("Tell all your friends about your new bot!");
+ form->addField(field);
+
+ CPPUNIT_ASSERT_EQUAL(String(
+ "<x type=\"form\" xmlns=\"jabber:x:data\">"
+ "<field type=\"hidden\" var=\"FORM_TYPE\">"
+ "<value>jabber:bot</value>"
+ "</field>"
+ "<field type=\"fixed\"><value>Section 1: Bot Info</value></field>"
+ "<field label=\"The name of your bot\" type=\"text-single\" var=\"botname\"/>"
+ "<field label=\"Helpful description of your bot\" type=\"text-multi\" var=\"description\"><value>This is a bot.</value><value>A quite good one actually</value></field>"
+ "<field label=\"Public bot?\" type=\"boolean\" var=\"public\">"
+ "<required/>"
+ "<value>1</value>"
+ "</field>"
+ "<field label=\"Password for special access\" type=\"text-private\" var=\"password\"/>"
+ "<field label=\"What features will the bot support?\" type=\"list-multi\" var=\"features\">"
+ "<value>news</value>"
+ "<value>search</value>"
+ "<option label=\"Contests\"><value>contests</value></option>"
+ "<option label=\"News\"><value>news</value></option>"
+ "<option label=\"Polls\"><value>polls</value></option>"
+ "<option label=\"Reminders\"><value>reminders</value></option>"
+ "<option label=\"Search\"><value>search</value></option>"
+ "</field>"
+ "<field label=\"Maximum number of subscribers\" type=\"list-single\" var=\"maxsubs\">"
+ "<value>20</value>"
+ "<option label=\"10\"><value>10</value></option>"
+ "<option label=\"20\"><value>20</value></option>"
+ "<option label=\"30\"><value>30</value></option>"
+ "<option label=\"50\"><value>50</value></option>"
+ "<option label=\"100\"><value>100</value></option>"
+ "<option label=\"None\"><value>none</value></option>"
+ "</field>"
+ "<field label=\"People to invite\" type=\"jid-multi\" var=\"invitelist\">"
+ "<desc>Tell all your friends about your new bot!</desc>"
+ "<value>foo@bar.com</value>"
+ "<value>baz@fum.org</value>"
+ "</field>"
+ "</x>"), testling.serialize(form));
+ }
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(FormSerializerTest);
diff --git a/Swiften/Serializer/XML/XMLTextNode.h b/Swiften/Serializer/XML/XMLTextNode.h
index 5f870ba..c1d13ef 100644
--- a/Swiften/Serializer/XML/XMLTextNode.h
+++ b/Swiften/Serializer/XML/XMLTextNode.h
@@ -11,6 +11,8 @@
namespace Swift {
class XMLTextNode : public XMLNode {
public:
+ typedef boost::shared_ptr<XMLTextNode> ref;
+
XMLTextNode(const String& text) : text_(text) {
text_.replaceAll('&', "&amp;"); // Should come first
text_.replaceAll('<', "&lt;");
@@ -21,6 +23,10 @@ namespace Swift {
return text_;
}
+ static ref create(const String& text) {
+ return ref(new XMLTextNode(text));
+ }
+
private:
String text_;
};